Skip to main content

SDK Python para os serviços do escritório de apoio do LabDados / FGV Direito SP — OCR, transcrição, estruturação com LLMs e análise de viabilidade. Roda em modo nuvem (com API key) ou local.

Project description

labdados — SDK Python

SDK oficial dos serviços do escritório de apoio do LabDados (FGV Direito SP).

Quatro funções de alto nível, em português, que cobrem os serviços do escritório:

  • labdados.ocr(...) — OCR de PDFs (texto e markdown).
  • labdados.transcricao(...) — transcrição (Whisper) e diarização de áudio.
  • labdados.estruturacao(...) — extração estruturada de campos com LLMs.
  • labdados.analise_viabilidade(...) — estima volume de processos antes de uma raspagem.

Como usar — três modos

Você pode rodar o SDK contra três alvos diferentes, sem mudar o código da chamada (só o api_key / local):

Modo Para quê Quem processa Quem paga
1. Nuvem do escritório Caso comum: quer processar dados sem instalar nada pesado. Servidores do escritório (Azure). Cota mensal vinculada à sua API key.
2. Local Sigilo absoluto, ou já tem GPU/Tesseract/Ollama em casa. Sua máquina. Você (CPU/GPU/Ollama/etc.).
3. Backend local via Docker Reproduzir o ambiente do escritório no seu computador (testar mudanças no backend, debugar workflow). Containers Docker no localhost. Você (CPU + Azure OpenAI se for usar estruturacao).

A diferença está no que você passa pra função:

import labdados

# 1) NUVEM do escritório
labdados.ocr(arquivos="pdfs/", api_key="sk_lab_...", saida="out/")

# 2) LOCAL (no seu computador)
labdados.ocr(arquivos="pdfs/", local=True, saida="out/")

# 3) BACKEND LOCAL via Docker (mesma chamada do modo 1, só muda a URL)
import os
os.environ["LABDADOS_BASE_URL"] = "http://localhost:8000"  # ou 18000 — ver abaixo
labdados.ocr(arquivos="pdfs/", api_key="sk_lab_...", saida="out/")

A seção certa pra ler depende do seu caso:


Instalação

Requer Python ≥ 3.11.

pip install labdados                    # base (apenas Modos 1 e 3)
pip install labdados[ocr]               # + OCR local (PyMuPDF + Tesseract)
pip install labdados[transcricao]       # + transcrição local (faster-whisper)
pip install labdados[estruturacao]      # + estruturação local (cliente OpenAI-compat)
pip install labdados[viabilidade]       # + análise de viabilidade (juscraper + Quarto)
pip install labdados[all]               # tudo

Os extras só são necessários para o Modo 2 (local). Os modos 1 e 3 só precisam do pacote base — o processamento pesado fica no servidor.


Modo 1 — Nuvem do escritório

Use quando você só quer mandar os arquivos e receber o resultado sem instalar nada pesado. É o caminho default.

1. Pegue uma API key

Peça uma no portal do escritório:

https://labdados-frontend.livelydesert-3e3e3dd8.brazilsouth.azurecontainerapps.io/consultoria/api-key

Você preenche um formulário curto, o admin aprova, e o token (algo como sk_lab_xxx...) chega por e-mail. Esse token é secreto — guarde como senha.

2. Use

import labdados

labdados.ocr(
    arquivos="meus_pdfs/",          # arquivo, lista ou pasta
    api_key="sk_lab_...",
    modelo="pymupdf-tesseract",     # ou "paddleocr" (mais preciso)
    formato="txt",                  # ou "md"
    idiomas="por+eng",
    saida="resultados/",
)

labdados.transcricao(
    arquivos="reuniao.mp3",
    api_key="sk_lab_...",
    modelo="whisperx",              # com diarização
    diarizacao=True,
    saida="resultados/",
)

labdados.estruturacao(
    arquivos="acordaos.csv",
    coluna_texto="ementa",
    api_key="sk_lab_...",
    schema={
        "type": "object",
        "properties": {
            "autor": {"type": "string"},
            "valor_causa": {"type": "number"},
        },
        "required": ["autor"],
    },
    saida="resultados/",
)

Cada chamada faz upload, dispara o processamento, faz polling até concluir e baixa o resultado em saida/ (geralmente um .zip).

Cliente reutilizável

Se for fazer várias chamadas, crie um Client uma vez:

client = labdados.Client(api_key="sk_lab_...")
client.ocr(arquivos="pdfs/", saida="out_pdf/")
client.transcricao(arquivos="audios/", saida="out_audio/", modelo="whisperx", diarizacao=True)
client.test_connection()                # confirma que a key tá ok

Cota mensal

Cada API key tem cota mensal em reais (default R$ 50/mês). O backend estima o custo antes de aceitar e pode rejeitar / truncar arquivos. Veja seu uso em Client.test_connection() ou no portal.


Modo 2 — Local

Use quando o dado é sigiloso (não pode sair da sua máquina) ou quando você já tem GPU / Tesseract / Ollama instalado e prefere usar.

Não precisa de API key — local=True já basta.

Requisitos por serviço

  • OCR localpip install labdados[ocr] + Tesseract no SO (instalador). No Windows, o SDK procura em C:\Program Files\Tesseract-OCR\tesseract.exe automaticamente; em outro path, defina TESSERACT_CMD.
  • Transcrição localpip install labdados[transcricao]. Roda em CPU (lento) ou GPU CUDA (se torch detectar). Sem diarização local — para diarizar, use o modo nuvem com modelo="whisperx".
  • Estruturação localpip install labdados[estruturacao]. Espera um servidor OpenAI-compatible no base_url_local. Default: Ollama em http://localhost:11434/v1. Funciona também com OpenAI direto, Azure OpenAI, vLLM, LM Studio.
  • Viabilidadepip install labdados[viabilidade]. Usa juscraper + Datajud direto da sua máquina (precisa de internet). Para gerar PDF, instale o binário do Quarto.

Exemplos

# OCR local
labdados.ocr(
    arquivos="pdfs_sensiveis/",
    local=True,
    modelo="pymupdf-tesseract",
    saida="out/",
)

# Transcrição local com modelo small (CPU)
labdados.transcricao(
    arquivos="reuniao.mp3",
    local=True,
    modelo_local="small",       # ou "tiny", "base", "medium", "large-v3"
    idioma="pt",
    formato="srt",
)

# Estruturação local com Ollama
labdados.estruturacao(
    arquivos="textos/",
    schema={"type": "object", "properties": {"resumo": {"type": "string"}}},
    local=True,
    modelo_local="qwen2.5:7b",
)

# Estruturação local com OpenAI direto
labdados.estruturacao(
    arquivos="textos/",
    schema={...},
    local=True,
    base_url_local="https://api.openai.com/v1",
    api_key_local="sk-...",
    modelo_local="gpt-4.1-mini",
)

# Viabilidade (sempre local, sem nuvem por enquanto)
labdados.analise_viabilidade(
    descricao="Sentenças TJSP sobre direito do consumidor.",
    listagem="datajud",
    tribunais=["tjsp"],
    classes_cnj="436",
    inicio="2024-01-01",
    fim="2024-06-30",
    saida="viab/",
)

Modo 3 — Backend local via Docker

Use quando você quer rodar todo o escritório no seu computador — útil para:

  • Desenvolver / testar mudanças no backend sem mexer em prod.
  • Debugar o fluxo end-to-end (upload → fila → service → download).
  • Demos sem depender de internet ou da cota da nuvem.

A receita: subir o repositório escritorio-servicos via docker compose, criar uma API key local, e apontar o SDK para http://localhost:18000 (ou 8000 se a porta padrão estiver livre).

1. Subir o stack

git clone https://github.com/lab-dados/escritorio-servicos
cd escritorio-servicos
cp .env.example .env       # defaults funcionam
docker compose --profile services up -d

Se a porta 8000 já estiver em uso por outro projeto, use o override que mapeia para portas alternativas:

docker compose -f docker-compose.yml -f .dev-notes/docker-compose.alt-ports.yml --profile services up -d
# backend: http://localhost:18000   (em vez de 8000)
# frontend: http://localhost:13000  (em vez de 3000)

2. Criar uma API key local

Em dev local não tem o fluxo de aprovação por e-mail — você cria a key direto no Postgres:

docker exec -i labdados-postgres psql -U labdados -d labdados <<'SQL'
INSERT INTO api_keys (id, key_hash, key_prefix, email, researcher_name, institution, status, monthly_budget_brl, created_at)
VALUES (
    gen_random_uuid()::text,
    encode(sha256('sk_lab_dev_token_secreto'::bytea), 'hex'),
    'sk_lab_dev',
    'dev@local',
    'Dev Local',
    'Local',
    'ACTIVE',
    1000.0,
    NOW()
);
SQL

Plaintext da key: sk_lab_dev_token_secreto (escolha o seu).

3. Apontar o SDK

import os
os.environ["LABDADOS_BASE_URL"] = "http://localhost:18000"  # ou 8000

import labdados
labdados.ocr(
    arquivos="pdfs/",
    api_key="sk_lab_dev_token_secreto",
    saida="out/",
)

Ou, equivalente sem variável de ambiente:

client = labdados.Client(
    api_key="sk_lab_dev_token_secreto",
    base_url="http://localhost:18000",
)
client.ocr(arquivos="pdfs/", saida="out/")

O que vem por default no Docker

  • OCR: build CPU (pymupdf-tesseract). Para paddleocr (GPU), use o override docker-compose.gpu.yml.
  • Transcrição: build CPU (faster-whisper standalone). model_id="whisperx" retorna 400 com mensagem clara — para WhisperX + diarização, use docker-compose.gpu.yml.
  • Estruturação: usa Azure OpenAI (gpt-4.1-mini). Configure AZURE_OPENAI_ENDPOINT e AZURE_OPENAI_KEY no .env antes de subir.
  • Viabilidade: funciona out-of-the-box.

Subindo com GPU local

Se você tem NVIDIA GPU + NVIDIA Container Toolkit:

docker compose -f docker-compose.yml -f docker-compose.gpu.yml --profile services up -d

O override troca os builds de OCR e Transcrição para os Dockerfiles GPU (PaddleOCR + WhisperX + pyannote).


Documentação completa

Como manter sincronizado com o backend

Este pacote é espelho da API v1 do escritório (https://github.com/lab-dados/escritorio-servicos). A maior parte da lógica compartilhada vive no labdados-core, que é dependência transitiva (puxado pelos extras). O guia para agentes de IA e mantenedores está no CLAUDE.md.

Licença

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

labdados-0.7.2.tar.gz (215.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

labdados-0.7.2-py3-none-any.whl (26.3 kB view details)

Uploaded Python 3

File details

Details for the file labdados-0.7.2.tar.gz.

File metadata

  • Download URL: labdados-0.7.2.tar.gz
  • Upload date:
  • Size: 215.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for labdados-0.7.2.tar.gz
Algorithm Hash digest
SHA256 e5740e228454fbec62e6dc6ab94e0b82421d2a65a74ccb9b6a1d76d87de068ca
MD5 1e6ec5e18f37e3c3fe966fd4b2d19f04
BLAKE2b-256 d73242bd5f90e59cddbab766d274d906026d03e7f7cb9332950d98212e276be2

See more details on using hashes here.

Provenance

The following attestation bundles were made for labdados-0.7.2.tar.gz:

Publisher: release.yml on lab-dados/labdados-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file labdados-0.7.2-py3-none-any.whl.

File metadata

  • Download URL: labdados-0.7.2-py3-none-any.whl
  • Upload date:
  • Size: 26.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for labdados-0.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 11555dc7d9c55d2d2d2508105806f51f119a328978b9f6d475eea5deabeb8bd3
MD5 2a9cae9ca3130e88657db00f9915a348
BLAKE2b-256 da32524ab05e8913b5c7e32f46ca6e4484e8bc64d5c0f34f390eb15fd71d7f21

See more details on using hashes here.

Provenance

The following attestation bundles were made for labdados-0.7.2-py3-none-any.whl:

Publisher: release.yml on lab-dados/labdados-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page