Skip to content

0.5.800

Latest

Choose a tag to compare

@a-ratz a-ratz released this 03 Nov 07:56
63ff5ab

Release Highlights

This feature release brings decision models to Flock: typed questions that a decision model answers with a probability per allowed answer, published as decisions that other agents subscribe to. It also adds images in artifacts, token usage and cost per run, OpenTelemetry GenAI spans for observability tools, and drops PyTorch. It rolls up everything merged since 0.5.700.

Decision models

  • .decides(Route, Urgent, threshold=0.8) asks typed Choice, YesNo, Scale and Checklist questions in one request and publishes one Decision per question. Agents subscribe to an answer (.consumes(Route.billing)), to the unsure branch (Route.UNSURE) or to several answers about the same subject (.consumes(Route.tech, Urgent.yes)).
  • Providers: Microsoft Foundry (azure/), the OpenAI Decisions API (openai/), TypeSafe Jev (jev/) and local servers (local/), with retries on HTTP 429/503 and a shared request budget per model (decision_rate_limit=).
  • For the cases where the model is not sure: escalation cascades (escalate=), ensembles and voting (models=, vote=), shadow mode (shadow=), explanations on demand (.explains()), human review (flock.review()), long documents in sections (sections=), coverage across artifacts (.aggregates()) and threshold calibration (calibrate(), flock-flow decisions calibrate).
  • Large catalogs: tournaments for choices with more than 255 options, runtime option subsets (options=) and screening networks.
  • Fourteen examples in examples/15-decisions, FakeDecider for tests and a decision models guide.

Images

  • flock.Image fields hold a picture as inline data; Image.from_file(), from_bytes() and from_pil() scale it down and strip EXIF metadata.
  • Decision models with vision and LLM agents receive images as pictures. The dashboard and POST /api/v1/artifacts/upload publish them, with size and pixel limits on every publish path.
  • See the images guide.

Usage, cost and tracing

  • Every agent run reports its tokens and cost (LiteLLM's price table, or Flock(model_prices=...)), in its metrics, the dashboard and the trace.
  • Every model call gets an LM.chat span in the OpenTelemetry GenAI conventions, and a run's spans carry session.id, so Langfuse, Opik and other OpenTelemetry backends show generations with model and tokens, grouped per run. OTLP export speaks HTTP when the OpenTelemetry variables ask for it, and a guide covers Langfuse, Opik, Phoenix, Jaeger and MLflow.
  • FLOCK_TRACE_LEVEL=agents (the new default) traces agent work, all adds Flock's internals. Spans are exported in batches off the event loop, and inputs and outputs are capped per attribute (FLOCK_TRACE_MAX_ATTRIBUTE_BYTES).

More

  • No more PyTorch: semantic subscriptions compute the same embeddings with fastembed on ONNX Runtime; a fresh install with the semantic extra went from 7.48 GB to 404 MB.
  • Named runs over REST: POST /api/v1/artifacts takes an optional correlation_id.
  • Dashboard APIs for the coming dashboard: agent runs, run history per artifact, activity histogram, active runs and a review queue per decider.
  • Kingfisher milestone: a new CLI banner and flock-flow --about.

Security

  • Pillow 13, the MCP SDK 1.30, LiteLLM 1.100.4, Starlette 1.3 with FastAPI 0.143 and updates for more than 20 further dependencies.

Upgrade notes

  • The in-process Hugging Face provider (transformers/, extra flock-core[transformers]) is gone; run local models in an OpenAI-compatible server such as Ollama, llama.cpp or vLLM.
  • Traces no longer contain Flock's internals unless you set FLOCK_TRACE_LEVEL=all.
  • An LLM agent that consumes several artifacts of one type now receives them as one list field; until now, the model saw only the first.
  • requirements.txt was removed; dependencies are managed with uv (pyproject.toml, uv.lock).
  • Pillow is now a base dependency, and LiteLLM 1.100 brings boto3 with it.

Notes

Known gaps: Microsoft Entra ID authentication for the Foundry decision provider, escalation inside tournaments, and reviews of checklists.

What's Changed

  • fix: drop PyTorch (semantic matching on ONNX), remove the in-process transformers provider, patch vulnerable dependencies by @a-ratz in #461
  • feat: decision models with typed choices, .decides() and choice subscriptions by @a-ratz in #462
  • feat: image inputs for decision models (flock.Image) with dashboard previews by @a-ratz in #465
  • ⚖️ Decision models: yes/no and scale questions, several questions per call (#466) by @a-ratz in #467
  • ☑️ Decision models: checklists, many yes/no items as one decision (#468) by @a-ratz in #470
  • ⚖️ Decision models: flock-wide default decision model (#471) by @a-ratz in #472
  • 🏆 Decision models: tournaments for choices with many options (#469) by @a-ratz in #473
  • 🏆 Decision models: maximized tournament bracket view (#475) by @a-ratz in #476
  • 🕸️ Decision networks: AND across handles, runtime options, screening networks (#477) by @a-ratz in #478
  • ⏱️ Decision models: retries on HTTP 429/503 and a request budget per decision model (#479) by @a-ratz in #481
  • 🧪 Batch timeouts on the monotonic clock, timer tests without wall-clock bounds (#480) by @a-ratz in #482
  • 🔎 Decision model stack: fixes for the code review findings (#484) by @a-ratz in #485
  • 📝 README and AGENTS.md: decision models and Foundry up front, verified and tightened (#486) by @a-ratz in #487
  • 🔎 Decision model stack: follow-ups from the Copilot review rounds (#488) by @a-ratz in #489
  • 🚦 CI check for stack #483 (do not merge) by @a-ratz in #490
  • 📝 README: working DeepWiki badge (#491) by @a-ratz in #492
  • 🧹 Housekeeping: rich test contamination, no committed dashboard build, dead links (#493) by @a-ratz in #495
  • 🐛 DSPy: pass validated input models so inputs match the signature (#496) by @a-ratz in #497
  • 🧪 Batching performance test: compare against an unbatched run instead of a wall-clock limit (#498) by @a-ratz in #504
  • 🐛 Streaming agents: show the real error, not a TaskGroup wrapper or a fake result (#502) by @a-ratz in #503
  • 🐛 DSPy engine: max_completion_tokens for the OpenAI API (#500) by @a-ratz in #501
  • docs: scheduling guide, tutorial and examples use the real API (#494) by @a-ratz in #505
  • docs: roadmap summarizes the backlog, Flock 1.0 in Q4 2026 (#451) by @a-ratz in #506
  • fix(store): SQLite store persists payloads with datetime and other non-JSON values (#507) by @a-ratz in #514
  • fix(context): TimeWindowContextProvider uses a UTC window filtered by the store (#508) by @a-ratz in #515
  • fix(agent): reject batch subscriptions on scheduled agents in either order (#509) by @a-ratz in #518
  • fix(dspy): retry a request rejected for max_tokens with max_completion_tokens (#516) by @a-ratz in #517
  • fix(store): scripts using the SQLite store exit; full shutdown closes it (#519) by @a-ratz in #520
  • feat(dspy): LLM agents receive Image fields as pictures (0.5.740, #510) by @a-ratz in #521
  • feat: publish images from the dashboard and through REST uploads (0.5.741, #511) by @a-ratz in #522
  • feat: image thumbnails across the dashboard, full images on demand (0.5.742, #512) by @a-ratz in #524
  • feat: image limits on every publish path, and an Images guide (0.5.743, #513) by @a-ratz in #525
  • feat: escalation cascades for decision models (#528) by @a-ratz in #529
  • feat: ensembles and voting for decision models (#530) by @a-ratz in #531
  • feat: shadow mode for decision models (#532) by @a-ratz in #533
  • feat: explain decisions on demand with an LLM (#534) by @a-ratz in #535
  • feat: coverage of checklist results across artifacts (#536) by @a-ratz in #537
  • feat: decide long documents in sections (#538) by @a-ratz in #539
  • feat: human review of decisions (#540) by @a-ratz in #541
  • feat: calibrate decision thresholds (#542) by @a-ratz in #543
  • fix: models with field aliases work everywhere (#544) by @a-ratz in #545
  • fix: "last N minutes" views show the newest artifacts (#547) by @a-ratz in #549
  • fix: LLM agents see every input of one type (#546) by @a-ratz in #548
  • fix: decision examples count unsure answers as misses (#552) by @a-ratz in #553
  • fix: dashboard decisions show their review and explanation also outside the view; a full graph shows the newest artifacts (#550, #554) by @a-ratz in #551
  • feat: Kingfisher milestone: new CLI banner, flock-flow --about, python -m flock (#555) by @a-ratz in #556
  • feat: dashboard demo without API keys (#570) by @a-ratz in #573
  • feat: token usage and cost per agent run (#571) by @a-ratz in #575
  • fix: the publish panel's tests wait for the artifact types (#578) by @a-ratz in #579
  • feat: artifact activity histogram endpoint for the dashboard timeline (#572) by @a-ratz in #576
  • fix: dashboard keyboard shortcuts are registered once, so the toggles work (#581) by @a-ratz in #582
  • feat: engine tag for the dashboard's agent cards (EngineComponent.kind) (#583) by @a-ratz in #584
  • fix: the live output tests check virtualization instead of wall-clock time (#587) by @a-ratz in #588
  • feat: graph agent nodes carry their subscription groups and last error; failed agents stay failed (#585) by @a-ratz in #586
  • fix: a batch's waiting state measures on the clock its timeout uses (#590) by @a-ratz in #591
  • feat: agent nodes carry their description and model (#592) by @a-ratz in #593
  • fix: the dashboard reads the trace file the tracer writes (#594) by @a-ratz in #595
  • feat: trace endpoint for an agent's latest runs (#597) by @a-ratz in #598
  • fix: dashboard trace reads connect like the tracer's exporter (#599) by @a-ratz in #600
  • feat: an artifact by ID with its consumption history (#605) by @a-ratz in #606
  • feat: active runs for a dashboard that connects while runs go on (#608) by @a-ratz in #609
  • feat: a decider's queue of unsure decisions that need a review (#610) by @a-ratz in #611
  • fix: export spans in batches, off the event loop (#601) by @a-ratz in #624
  • fix: pin the Foundry sample to the released flock-core 0.5.700 by @a-ratz in #627
  • feat: trace agent work by default, Flock's internals at FLOCK_TRACE_LEVEL=all (#601) by @a-ratz in #628
  • feat: cap span inputs and outputs, keep artifacts short (#601) by @a-ratz in #631
  • feat: a REST publish can name its run with correlation_id (#618) by @a-ratz in #633
  • fix: update Jupyter Server to prevent Referer token leaks by @swolg in #663
  • fix: close the 113 Dependabot alerts on main (#676) by @a-ratz in #677
  • fix: export OTLP over HTTP when the OTel variables ask for it (#679) by @a-ratz in #684
  • feat: a span per model call in the OpenTelemetry GenAI conventions (#680) by @a-ratz in #686
  • feat: a run's traces group into one session or thread (#681) by @a-ratz in #687
  • docs: a guide for tracing backends, comparisons without claims about other tools (#682) by @a-ratz in #688
  • fix: close the litellm and dnspython Dependabot alerts on main (#689) by @a-ratz in #690
  • chore: bump version to 0.5.800 by @a-ratz in #691

Full Changelog: 0.5.700...0.5.800