Repository navigation
Conversation
A mensagem de pacote ausente sugeria dataframeit[all] para todo provider do LangChain, mas o extra só traz os providers com extra próprio. Para mistralai, cohere, bedrock e google_vertexai a sugestão não resolvia. A lista de pacotes do extra sai dos metadados do pacote instalado, e um teste a compara com o pyproject.toml; sem metadados, a dica não sai (#279).
Bloco de evidênciaCaso concreto na base (
|
| Caso | Esperado | Base | Ramo |
|---|---|---|---|
openai sem langchain_openai |
langchain-openai e dataframeit[all] |
passa | passa |
azure_openai sem langchain_openai |
langchain-openai e dataframeit[all] |
passa | passa |
google_genai sem o pacote (teste existente em test_codex.py) |
langchain-google-genai e dataframeit[all] |
passa | passa |
mistralai sem o pacote |
só langchain-mistralai |
reprova | passa |
cohere sem o pacote |
só langchain-cohere |
reprova | passa |
bedrock sem o pacote |
só langchain-aws |
reprova | passa |
metadados ausentes (PackageNotFoundError), openai |
só langchain-openai |
reprova | passa |
conjunto lido dos metadados == optional-dependencies.all do pyproject.toml (via packaging) |
iguais | reprova (função não existe) | passa |
langchain / langchain-core ausentes (testes existentes) |
mantêm dataframeit[all] |
passa | passa |
Mutação: trocar o filtro if match and _EXTRA_ALL_MARKER.search(marker): por if match: (o parser passa a contar as dependências obrigatórias e os outros extras) reprova o teste de comparação com o pyproject.toml (1 failed, 6 passed); o arquivo foi restaurado e a suíte do módulo voltou a 28 passed.
Suíte
Comando: uv run --extra dev --extra all --extra search-all --extra polars --extra excel --extra codex pytest -q -p no:cacheprovider --cov=dataframeit --cov-branch --cov-report=term-missing
| passados | pulados | falhas | cobertura | |
|---|---|---|---|---|
base ec332656 |
2192 | 0 | 0 | 99,96% (codex.py 723-724) |
ramo 3294a5d7 |
2199 | 0 | 0 | 99,96% (codex.py 723-724) |
As duas linhas descobertas são o except ImportError do import opcional do openai_codex, que não roda com o extra codex instalado, e aparecem igual na base; errors.py fica em 100% de linhas e ramos. Só com --extra dev (job unit), tests/test_erros_de_provider.py e tests/test_codex.py dão 270 passed. ruff format --check, ruff check, ty check, vulture e deptry src saem com 0 no ramo.
O teste de comparação usa packaging, que chega ao ambiente de teste pelo pytest; o src/ não o importa, e o parser do requisito em errors.py é próprio, para não depender de pacote não declarado.
Risco: baixo, só muda o texto de uma mensagem de erro; desfazer com o revert do squash.
SHA revisado: 3294a5d
Passada do simplificador de diffO simplificador de diff passou sobre SHA revisado: 3294a5d |
…r-provider # Conflicts: # CHANGELOG.md # tests/test_erros_de_provider.py
Quando falta o pacote LangChain de um provider,
validate_provider_dependenciessugeriapip install langchain-<provider>e, como alternativa,pip install dataframeit[all], para todo provider. O extraallsó trazlangchain-google-genai,langchain-openai,langchain-anthropicelangchain-groq; paramistralai,cohere,bedrock,google_vertexaie qualquer outro provider LangChain, instalardataframeit[all]não resolve, e a mesma mensagem volta.O que muda:
_all_extra_packages()lêimportlib.metadata.requires("dataframeit"), filtra os requisitos com o marcadorextra == "all"e devolve os nomes normalizados (PEP 503). A dica dedataframeit[all]só sai quando o pacote de instalação do provider está nesse conjunto.azure_openai, que usalangchain-openai, continua com a dica.PackageNotFoundError, como ao rodar o fonte sem instalar), o conjunto é vazio e a dica não sai: sem saber o que o extra traz, sugeri-lo poderia mandar instalar algo que não resolve.langchainelangchain-coreausentes ficam como estão: os dois são dependências obrigatórias, edataframeit[all]os instala.Testes novos em
tests/test_erros_de_provider.py: a dica paraopenaieazure_openai(com) e paramistralai,cohereebedrock(sem); o fallback sem metadados; e a comparação do conjunto lido dos metadados comproject.optional-dependencies.alldopyproject.toml, parseado compackaging, para que os dois não divirjam.A FAQ (
docs/guides/faq.mdedocs/en/guides/faq.md) passa a dizer que a mensagem sugere oallsó quando o pacote está nele, e só olangchain-<provider>para os providers sem extra próprio.Closes #279