v2.1

HumanSignal/label-studiov2.1Jun 26, 2026by github-actions[bot]

AI Summary

Version 2.1 focuses on robustness and UI improvements for the Responses API, including fallback handling, image attachment materialization, and plain-text completion rendering. It also fixes WebUI message replay ordering and removes backup file caps.

Key Highlights

  • Fallback handling for OpenAI-compatible Responses API rejections
  • Materialize MCP image attachments as scoped artifacts
  • Render plain Responses completions in WebUI
  • Fix WebUI message replay ordering
  • Remove backup file count cap

New Features

  • Normalize Responses tool schemas
  • Prefer tool roots in streamed JSON extraction
  • Accept JSON-string parallel tool calls
  • Skills tooling compatibility improvements
  • Fix for cleared chat history reloading (from previous release)

Full Release Notes

## Release Notes

- **Fallback handling for Responses API rejections** — OpenAI-compatible providers that reject `/v1/responses` payloads with a 400 validation error now correctly retry through Chat Completions. Generic bad-request errors are no longer misinterpreted as proof that Responses is unsupported; only endpoint-specific and Venice-style rejections trigger the fallback.

- **Materialize MCP image attachments** — MCP image and image-resource payloads are now saved as scoped artifact files, returning real file paths in tool text and attachment metadata instead of only inline data URLs. Images remain model-visible through raw image history content.

- **Normalize Responses tool schemas** — Function parameter schemas now include an explicit `properties` object before Responses requests are dispatched, keeping permissive prompt/MCP schemas compatible with stricter OpenAI-compatible chat validators.

- **Render plain Responses completions in WebUI** — When Responses mode returns a plain-text final answer, the active "Calling LLM" log item is now correctly promoted to a finished response entry instead of leaving the UI stuck on the generating step.

- **Fix WebUI message replay ordering** — Full log snapshots are now treated as authoritative replays, clearing the message DOM when the snapshot starts at log 0 and rendering in backend order. This prevents streamed responses from appearing above earlier welcome/user messages after sync races.

- **Prefer tool roots in streamed JSON extraction** — The JSON extraction logic now prefers the first complete root that normalizes as a tool request, reducing false misformat warnings when incidental JSON or leading prose precedes a streamed tool-call envelope.

- **Accept JSON-string parallel tool calls** — Providers or models that stringify the `tool_calls` array inside `tool_args` are handled again; the wrapper decodes the string and runs the same validation path as normal tool-call objects.

- **Remove backup file count cap** — Backup creation and restore cleanup no longer cap file pattern scans at 50,000 files, so archives for large agent directories are complete. UI preview and dry-run paths remain bounded for responsiveness.

- **Skills tooling compatibility** — Empty `skills_tool` calls now default to `list`, the legacy `method` parameter is accepted as a deprecated alias for `action`, and malformed `SKILL.md` frontmatter emits a once-per-path warning with line numbers instead of silently skipping the skill.