Núcleo compartilhado entre o backend do escritório de apoio do LabDados e o SDK Python labdados — lógica que precisa ficar idêntica nos dois lados (análise de viabilidade, regras de veredito, template do relatório).
Project description
labdados-core
Núcleo Python compartilhado entre o backend do escritório de apoio do
LabDados (escritorio-servicos)
e o SDK Python (labdados-sdk).
A regra: tudo que precisa ficar byte-equivalente entre os dois lados (prompts, formatadores de saída, schemas, regras de domínio) vem pra cá. Tudo que é específico de um (cliente HTTP do SDK, worker de fila do backend, app FastAPI) não vem.
O que mora aqui
| Subpacote | O que faz | Extras necessários |
|---|---|---|
contracts |
Pydantic models compartilhados (FileMetadata, ProcessRequest/Response, JobStatus, ViabilityForm/Results). |
(nenhum — pydantic é dep base) |
viabilidade |
Análise de viabilidade (Datajud + juscraper) + render do relatório PDF/MD via Quarto. | (nenhum) |
estruturacao |
Pipeline LLM via DataFrameIt, readers de .txt/.md/.docx/.csv/.xlsx, prompts canônicos. |
[estruturacao] |
ocr |
Pipeline OCR com 2 engines (PyMuPDF+Tesseract / PaddleOCR), formatters (join_pages, build_pages_zip), descoberta automática do binário Tesseract. |
[ocr-cpu] ou [ocr-gpu] |
transcricao |
Formatadores TXT/SRT/VTT compartilhados, helpers de timestamp e Segment TypedDict. |
(nenhum — engine fica nos consumidores) |
Instalação
Requer Python ≥ 3.11.
pip install labdados-core # base (contracts + viabilidade)
pip install labdados-core[estruturacao] # + DataFrameIt + openai + openpyxl
pip install labdados-core[ocr-cpu] # + PyMuPDF + pytesseract + Pillow
pip install labdados-core[ocr-gpu] # + PaddleOCR (GPU)
pip install labdados-core[all] # alias para [estruturacao]
Para gerar o PDF do relatório de viabilidade, instale também o binário do
Quarto no sistema (com Typst, incluído nas builds
oficiais ≥ 1.4). Sem o Quarto, render_report() devolve apenas o markdown.
Uso
Análise de viabilidade
from labdados_core.viabilidade import analyze_form, render_report
results = analyze_form({
"listagem": "datajud",
"tribunais_selecionados": ["tjsp", "tjrj"],
"filtro_classes_cnj": "7",
"recorte_inicio": "2020-01-01",
"recorte_fim": "2024-12-31",
})
print(results["verdict"]) # "viable" / "caveats" / "unviable"
print(results["total_aproximado"])
report = render_report(
request_id="abc-123",
form={...},
results=results,
request_meta={"researcher_name": "Fulano", "institution": "FGV", "email": "..."},
)
if report:
pdf_bytes, md_bytes = report
Estruturação com LLM
from labdados_core.estruturacao import LlmConfig, estruturar
from pydantic import BaseModel
class Decisao(BaseModel):
procedente: bool
valor_causa: float | None
config = LlmConfig(
provider="openai",
model="gpt-4o-mini",
api_key="sk-...",
)
results = estruturar(
["A demanda foi julgada procedente, com valor de R$ 5.000,00."],
schema=Decisao, # ou um JSON Schema dict — converte automaticamente
system_prompt="Você extrai decisões judiciais.",
llm_config=config,
)
print(results) # [{"procedente": True, "valor_causa": 5000.0, "_doc_id": "doc_1"}]
LlmConfig.provider aceita "openai", "azure_openai" ou "openai_compat"
(cobre vLLM, Ollama, LM Studio via base_url).
OCR
from labdados_core.ocr import extract, join_pages
pages = extract(
"documento.pdf",
modelo="pymupdf-tesseract", # ou "paddleocr" (precisa [ocr-gpu])
languages="por+eng",
dpi=200,
deskew=True,
)
print(join_pages(pages, output_format="md"))
Formatadores de transcrição
from labdados_core.transcricao import format_segments
segments = [
{"start": 0.0, "end": 2.5, "text": "Olá."},
{"start": 2.5, "end": 5.0, "text": "Tudo bem?", "speaker": "SPEAKER_00"},
]
print(format_segments(segments, output_format="srt", with_speaker=True))
(O engine de transcrição em si — faster-whisper, WhisperX, pyannote — não mora aqui; cada consumidor instancia o seu.)
Por que existe
Antes deste pacote, prompts, formatadores e schemas viviam duplicados no
backend (escritorio-servicos) e no SDK (labdados-sdk). Bug em um → bug
eventual no outro. Com o core, ambos importam do mesmo lugar e ficam
forçadamente em sintonia. A versão fica pinada nos dois consumidores via
>=0.x,<0.(x+1).
Versionamento
SemVer com pin estrito de minor enquanto não atinge 1.0:
- patch (0.x.y): bug fix sem mudança de assinatura.
- minor (0.x.0): nova função / argumento opcional. Backwards-compat.
- major (x.0.0): mudança no shape de retorno ou no contrato. Coordenar bump nos dois consumidores.
Ver CHANGELOG.md.
Licença
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file labdados_core-0.11.1.tar.gz.
File metadata
- Download URL: labdados_core-0.11.1.tar.gz
- Upload date:
- Size: 57.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78a2017a859930e4f04a0ca639265844af4782bd87031737ffd76b510d0eaaf8
|
|
| MD5 |
84f995760e237ef44cee33d937985384
|
|
| BLAKE2b-256 |
9ff40aee9741944b48d672220b34b6ad4a44f1277445c1881fc65b4f625098b5
|
Provenance
The following attestation bundles were made for labdados_core-0.11.1.tar.gz:
Publisher:
release.yml on lab-dados/labdados-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
labdados_core-0.11.1.tar.gz -
Subject digest:
78a2017a859930e4f04a0ca639265844af4782bd87031737ffd76b510d0eaaf8 - Sigstore transparency entry: 1437190141
- Sigstore integration time:
-
Permalink:
lab-dados/labdados-core@0386f951aa771c7b26be33e01171dafbe02baeb9 -
Branch / Tag:
refs/tags/v0.11.1 - Owner: https://github.com/lab-dados
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0386f951aa771c7b26be33e01171dafbe02baeb9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file labdados_core-0.11.1-py3-none-any.whl.
File metadata
- Download URL: labdados_core-0.11.1-py3-none-any.whl
- Upload date:
- Size: 51.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbfaf56968f8be81689849c15fe40ec50926f10622f48454f2be578c33d26c13
|
|
| MD5 |
dc1c590d7e7926f47dfd2c14871be46d
|
|
| BLAKE2b-256 |
ba8298f79145bed1ede52e633aca9308ab1f9a0e1b2e1f040f5d3296b981d3fe
|
Provenance
The following attestation bundles were made for labdados_core-0.11.1-py3-none-any.whl:
Publisher:
release.yml on lab-dados/labdados-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
labdados_core-0.11.1-py3-none-any.whl -
Subject digest:
bbfaf56968f8be81689849c15fe40ec50926f10622f48454f2be578c33d26c13 - Sigstore transparency entry: 1437190152
- Sigstore integration time:
-
Permalink:
lab-dados/labdados-core@0386f951aa771c7b26be33e01171dafbe02baeb9 -
Branch / Tag:
refs/tags/v0.11.1 - Owner: https://github.com/lab-dados
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@0386f951aa771c7b26be33e01171dafbe02baeb9 -
Trigger Event:
push
-
Statement type: