Repository navigation
v3.3.0 — Experiment observability, benchmark authoring, and human review
v3.3.0
Adds a complete experiment and review workflow on top of the observability store: versioned benchmarks and tasks, registered experiments, execution evidence, and human feedback anchored to the turn or component that needs work (#82). Package version is 3.3.0 (pyproject.toml). This wheel is already on PyPI.
There were no GitHub tags for v3.2.0 or v3.2.1 (those versions did ship on PyPI). This tag is everything since v3.1.2.
This is not a drop-in import-path or store-file upgrade. Read the breaking section before you open an existing observability.sqlite3 or keep scripts that import the old module names.
Requires Python >=3.13,<3.15 (unchanged). Restart run_chatbot to load the updated UI.
Breaking changes (read before upgrading)
- Admin dump/token routes stay off by default (v3.2.0).
POST /admin/dump_all_conversationsandPOST /admin/generate_mcp_token404 unless the server is started with--enable_admin_endpoints, and they need a Bearer token even then.
Routing-adjacent behavior
Nothing here changes the default install's routing unless you set the new env knobs.
-
Tied fuzzy command-name pre-matches still defer to the classifier (shipped in v3.1.2). Prefix-sharing commands no longer pick
[0]duringINTENT_DETECTION. Clarification stages are unchanged. -
Optional experiment isolation knobs (defaults leave today's behavior):
FW_LM_CACHE=0— disable the process-wide DSPy LM cache so repeated attempts are not byte-identical cache hits.FW_UTTERANCE_CACHE_SCOPE=workflow— shard the utterance/clarification cache by workflow id so attempts do not inherit each other's disambiguations.- The experiment runner applies these for measured runs. Unset keeps the shared cache and DSPy cache as before.
Highlights
- Experiment container — driver-neutral lifecycle, exact attempt declarations, bootstrap/claim binding and fencing, evidence draining, sealed workspace browsing. Creation mints stable IDs for runner handoff; it does not execute tasks.
- Observability store and
run_chatbotUI — oneobservability.sqlite3per workflow (conversations, turns, OTel-shaped spans, artifacts, train runs, writer health). Debug sidebar: benchmark → experiment → conversation; ad-hoc conversations grouped by UTC date. Turns and trace components open in the right pane with a full breadcrumb. Record navigator for moving between records without losing place. - Benchmarks — versioned catalog and setup in the chatbot and in
fastworkflow.benchmark. - Human feedback and review sidecar — component-anchored, timestamped comments, kept separate from agent-memory feedback. Independent rubric-based review (
observability-reviews.sqlite3): capability-gated assignments, blinded evidence projections, rating export. Feedback is editable in working stores and read-only in workspace snapshots. - Capture policy and decision signals —
debugvsevidenceprofiles (FW_OBS_CAPTURE_PROFILE; defaultdebugis today's verbatim capture plus credential scrub). Decision uncertainty/consequence are recorded; they do not change routing. - Archive experiments — durable
archivedannotation (schema v6); UI marks archived rows. - Runtime manifests and readiness — snapshots on bound attempts, structured execution records, provenance, cost visibility, writer-health improvements.
- Developer skills for benchmark authoring, trace diagnosis, and turning feedback into regression coverage.
- Training (v3.2.1 / #78) — thin (below-floor) intent labels warn and stay unmeasured instead of aborting train or blocking publish; empty/missing labels still block.
What's Changed (PRs since v3.1.2)
- feat: v3.2.0 — observability store, chatbot debug UI, and conversation-store consolidation by @dharrawal in #73
- Fix training behavior for thin labels and missing provenance by @dharrawal in #75
- fix(train): do not refuse publication for below-floor labels by @dharrawal in #78
- Add experiment observability, benchmark authoring and human review by @dharrawal in #82
Full Changelog: v3.1.2...v3.3.0
Install
uv pip install 'fastworkflow==3.3.0'
# optional extras:
uv pip install 'fastworkflow[server]==3.3.0' # FastAPI/MCP HTTP service
uv pip install 'fastworkflow[training]==3.3.0' # HuggingFace datasets for trainGPU training (optional — default install is CPU torch):
uv pip install --upgrade --force-reinstall 'torch>=2.7.1' \
--index-url https://download.pytorch.org/whl/cu130
uv pip install --upgrade 'fsspec[http]>=2023.1.0,<=2026.2.0'
python -c "import torch; print(torch.cuda.is_available(), torch.__version__)"