Skip to main content

Prompt optimization framework driven by empirical gabaritos.

Project description

Crucible

CI PyPI Python License: MIT

Crucible é um framework pragmático para otimização empírica de prompts. Ele executa um prompt contra um gabarito versionado, mede qualidade/custo/latência, usa um modelo de raciocínio para diagnosticar falhas, refina o prompt e mantém o melhor prompt encontrado durante a run.

O projeto é local-first: CLI e SDK são as interfaces principais, SQLite guarda o histórico consultável, relatórios são artefatos estáticos, e dashboard/API são interfaces locais opcionais sobre os mesmos dados.

O Que Ele Faz

  • Valida prompts contra casos de teste ponderados.
  • Otimiza prompts usando um target_model e um reasoning_model.
  • Suporta Ollama, OpenAI-compatible APIs, Anthropic, Google, OpenRouter, vLLM, llama.cpp e provider fake para testes.
  • Persiste runs em .crucible/ para auditoria, comparação e reprodutibilidade.
  • Gera relatórios HTML, JSON e PDF.
  • Exporta verdicts em CSV/Parquet e o melhor prompt em texto.
  • Registra Pareto frontier para otimização qualidade x custo x latência.
  • Sugere novos casos de gabarito a partir de falhas, regressões e instabilidade.
  • Oferece CLI, SDK Python, dashboard local e REST API.
  • Permite assertions e importadores customizados via plugins.
  • Inclui scaffold de extensão VSCode.

Quickstart

O fluxo normal não começa otimizando. Primeiro você valida se o prompt, o gabarito e os providers estão funcionando; depois estima custo; só então roda a otimização.

uv sync
uv run crucible init ./my-prompt
uv run crucible validate --prompt ./my-prompt/prompt.txt --gabarito ./my-prompt/gabarito.yaml --config ./my-prompt/config.yaml
uv run crucible estimate-cost --config ./my-prompt/config.yaml
uv run crucible optimize --config ./my-prompt/config.yaml
uv run crucible compare-models --config ./my-prompt/config.yaml
uv run crucible serve

Abra http://127.0.0.1:7777 para inspecionar o histórico local.

O template criado pelo init usa Ollama como modelo alvo e OpenAI como modelo de raciocínio. Ajuste config.yaml antes de rodar se esses providers não estiverem disponíveis.

Como Pensar No Fluxo

validate responde: "o prompt atual passa no meu gabarito?".

Ele executa apenas a versão atual do prompt, calcula score e mostra se o setup está correto. Use para depurar gabarito, provider, assertion e formato de saída.

optimize responde: "o Crucible consegue melhorar este prompt?".

Ele executa o prompt, encontra falhas, pede ao reasoning_model um diagnóstico, gera uma nova versão do prompt e repete até bater threshold, budget ou outro critério de parada. A run sempre preserva o melhor prompt encontrado, não necessariamente o último.

compare-models responde: "qual target entrega melhor qualidade, custo e custo-benefício neste gabarito?". Ele usa comparison_models no config.yaml e executa uma iteração por modelo, sem refino.

Uso Mínimo Via SDK

from crucible import Gabarito, Optimizer, OptimizationConfig, Prompt

config = OptimizationConfig.model_validate({...})
prompt = Prompt.from_file("prompt.txt")
gabarito = Gabarito.from_yaml("gabarito.yaml")

optimizer = Optimizer(config)
estimate = optimizer.estimate_cost(prompt, gabarito)
run = await optimizer.optimize(prompt, gabarito)
report_path = await optimizer.report(run.id, format="html")

Estado Local

Crucible escreve estado local em .crucible/:

  • .crucible/crucible.sqlite: índice consultável de runs, iterações e verdicts.
  • .crucible/runs/: payloads completos, JSONL de iterações/verdicts e melhor prompt.
  • .crucible/reports/: relatórios gerados.
  • .crucible/cache/: cache de execuções.

Isso é intencional. Histórico de run é dado de produto, não arquivo temporário. Use /tmp apenas para execuções descartáveis.

Comandos Comuns

uv run crucible estimate-cost --config ./my-prompt/config.yaml
uv run crucible validate --prompt prompt.txt --gabarito gabarito.yaml --config config.yaml
uv run crucible optimize --config config.yaml
uv run crucible list-runs
uv run crucible show-run --run latest
uv run crucible report --run latest --format html
uv run crucible export --run latest --format csv --output ./verdicts.csv
uv run crucible split-gabarito --gabarito gabarito.yaml --output-dir ./splits
uv run crucible serve
uv run crucible api --port 7788

Documentação

Comece por aqui:

Exemplos:

Licença

Crucible é open source sob 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

crucible_prompt_ai-0.1.0.tar.gz (55.5 kB view details)

Uploaded Source

Built Distribution

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

crucible_prompt_ai-0.1.0-py3-none-any.whl (74.8 kB view details)

Uploaded Python 3

File details

Details for the file crucible_prompt_ai-0.1.0.tar.gz.

File metadata

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

File hashes

Hashes for crucible_prompt_ai-0.1.0.tar.gz
Algorithm Hash digest
SHA256 bb260eacd30fa4b13bdc7efa481df79b4b7a3b48837d256820d58901148f3489
MD5 e01488573b23051f61b822e50f559afd
BLAKE2b-256 908e4d748c5602f330edd0cb19ddbc067d3c674a6ef881c1c9fd5da0629f454d

See more details on using hashes here.

Provenance

The following attestation bundles were made for crucible_prompt_ai-0.1.0.tar.gz:

Publisher: publish-python.yml on darcivieira/crucible

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

File details

Details for the file crucible_prompt_ai-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for crucible_prompt_ai-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e403cbbf5ecae060a3c5fdcd5d866ac316b70f38ea085687de33a2c8f91e62e6
MD5 2cb6b2e6d8f60f75686d8ce2686e53bf
BLAKE2b-256 aab1157af19a736f19632be19ea272a12288bca5a20a12d043065671928ee035

See more details on using hashes here.

Provenance

The following attestation bundles were made for crucible_prompt_ai-0.1.0-py3-none-any.whl:

Publisher: publish-python.yml on darcivieira/crucible

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