JS SDK
-
New GPT-5.x models in the OpenAI-compatible plugin. Added
gpt-5.2,gpt-5.4,gpt-5.4-mini,gpt-5.4-nano, andgpt-5.5tocompat-oai, so you can reach the latest OpenAI models without waiting on a plugin bump. (#5389) -
Per-request Anthropic API keys. The Anthropic plugin now resolves the API key lazily at request time instead of only at init, so you can override the key per call. Handy for multi-tenant setups and key rotation. (#4298)
-
Clearer retry and fallback logs. The
retryandfallbackmodel middleware now emit structured warnings explaining what happened: which attempt, how long the backoff is, why a retry was skipped, and which model it's falling back to.AbortErrorandToolInterruptErrorare now correctly treated as non-retryable. (#5449) -
Fixed audio transcription file extensions.
compat-oaispeech-to-text now derives the right file extension from the content type (.mp3,.wav,.webm, and friends) instead of a generic name, which fixes transcription failures with providers that key off the extension. (#3367) -
More reliable agent resume.
validateResumeAgainstHistorynow searches history newest-first, fixing an edge case when resuming interrupted conversations. (#5832) -
Options for checkOperation and cancelOperation. You can now pass options (including per-request client config) when polling or cancelling long-running operations. Auth and secrets are also now scrubbed from context logging. (#5972)
-
Security hardening for background operations (heads up: minor breaking change). The google-genai plugin no longer persists
clientOptionsin operation metadata, which previously risked leaking API keys if you returned a full operation object to a client. If you use per-request overrides (like a custom API key) with long-running models, you now need to pass those same overrides to eachcheckOperation/cancelOperationcall. (#5992) -
ROUGE evaluator fix on Vertex AI. Corrected the type used by the ROUGE score evaluator and cleaned up duplicated evaluator types. (#3592)
CLI
-
Structured output now survives "Export to .prompt". When you export from the Dev UI model runner, the output schema is included in the front matter (written as Picoschema) instead of being dropped, so exported prompts keep their structured output config. (#5506)
-
Cleaner
trace:getoutput.genkit trace:get <id>gets a readable tree view, and--format jsongives you clean JSON that's easy to pipe into other tools. (#5848) -
More reliable startup in ephemeral runtimes. The CLI now waits for actions to finish registering before proceeding, fixing flaky behavior where actions weren't yet available. (#5949)
Dev UI
This release makes the runners smarter about structured output, sharpens live streaming in the Agent Runner, and clears up a bunch of rough edges in traces, tools, and datasets.
Highlights
- See and edit output config in the Model Runner. The Model Runner now has an editable Output panel. When you load a generation from a trace, you can inspect the inherited format and JSON schema, tweak them, or switch back to plain text for a freeform prompt. The schema shows up as readable JSON Schema instead of a raw Zod blob, and a reset restores the inherited config.
- Structured JSON output, rendered properly. Model Runner output that comes back as JSON is now rendered as clean, formatted JSON instead of a wall of text.
- Output conformance in the Prompt Runner. The Prompt Runner now supports output conformance, so prompts that define a structured schema behave consistently with the rest of the tooling.
- Live streaming patches in the Agent Runner. Agent Runner now supports
customPatchstreaming, so incremental updates from your agent show up in the UI as they arrive.
🛠️ Improvements & Fixes
- No more garbled streamed text. Fixed a decoding bug where multi-byte characters (CJK, emoji, accented letters) split across network chunks would render as
�. Streamed output now decodes cleanly across chunk boundaries. - Structured output + tools now play nicely together. Schemas are sent under the field the generate action actually reads, so structured output no longer accidentally suppresses tool calls. The tool loop runs and applies the structured result on the final turn.
- Real-time span metadata in traces. In-progress spans now keep their initial metadata (name, path, type) instead of dropping it, and show a clean
--placeholder for duration until the span completes. - Agent Runner session fixes. Switching from multi-turn (bidi) to single-turn mode no longer trips strict backends (e.g. Python/Pydantic) with
extra_forbiddenerrors, session IDs update correctly when a bidi stream ends, and context is preserved when starting a new chat or loading a trace. - Manual tool responses are now sent as proper messages, and tool action cards render correctly when resuming or adding a model message with tool requests.
- Interruptions callout added to the Tools page so it's clearer what's happening when a tool interrupts.
- Dataset sample editor restored to its cleaner previous style, plus tidier JSON editor spacing.
New Contributors
- @MikeRez0 made their first contribution in #5239
- @a2105z made their first contribution in #5891
- @nsrCodes made their first contribution in #3367
Full Changelog: v1.40.1...v1.41.0