Skip to content

Releases

v2.7.1

Choose a tag to compare

@adk-go-bot adk-go-bot released this 04 Nov 18:57
826b5e2

2.7.1 (2026-11-04)

Bug Fixes

  • agentanalytics: classify Write API errors and split oversized batches (#2016) (2466e97)
  • model/openaimodel: refuse media in system and developer Responses messages (#2025) (40f132d)
  • model/openaimodel: refuse non-text payloads beside system instruction text (#2113) (fe99252), closes #2112

plugin/agentanalytics v0.1.0

Choose a tag to compare

@wolo-lab wolo-lab released this 05 Nov 11:47
e342d2f

The first release of the BigQuery Agent Analytics plugin for ADK Go. It logs every agent run to a BigQuery table, so you can query and dashboard agent behavior with SQL: invocations, model requests and responses, tool calls, state changes, agent transfers and human-in-the-loop requests.

The table schema, event type names and analytics views match adk-python's BigQuery Agent Analytics plugin, so Go and Python agents can write to the same table and be queried together.

Install

go get google.golang.org/adk/plugin/agentanalytics@v0.1.0

Requires google.golang.org/adk/v2 v2.0.0 or later.

Quick start

analytics, err := agentanalytics.NewBigQueryAgentAnalyticsPlugin(ctx, "my-project", "agent_analytics", "agent_events")
if err != nil {
	log.Fatal(err)
}
defer analytics.Close() // flushes queued rows to BigQuery

r, err := runner.New(runner.Config{
	AppName:        "my-app",
	Agent:          myAgent,
	SessionService: session.InMemoryService(),
	PluginConfig:   runner.PluginConfig{Plugins: []*plugin.Plugin{analytics}},
})

Call Close before the process exits, so that rows still in the queue are written.

What's included

  • Ready to query out of the box. The plugin creates the events table if it is missing, adds new columns to an existing table, and creates 25 per-event views such as v_llm_request and v_tool_completed.
  • Batched, non-blocking writes through the BigQuery Storage Write API, 100 rows or 1 second per batch by default. Batches over 8 MiB are split so that a single large batch is not rejected as a whole.
  • Redaction on by default. Values under keys like api_key, password and token, credentials in URLs, and Authorization, Bearer and Basic credentials are replaced with [REDACTED]. Text values longer than 512,000 characters are truncated unless CaptureFullMessageContent is set.
  • Control over what is logged: event allow and deny lists, a payload column deny list, a ContentFormatter hook to transform or redact payloads before they are written, custom tags, and an allow list for CustomMetadata keys.
  • Cloud Storage offload (optional). Set GCSBucketName to store large text and binary parts in a bucket and keep a reference in the row.
  • Exactly-once delivery (optional). ExactlyOnceDelivery writes through a committed stream with explicit offsets, so retries do not write rows twice.
  • Drop counters. DropStats reports rows lost to a full queue, failed writes or shutdown.
  • OpenTelemetry correlation (optional). EnableOTelCorrelation adds the current trace and span IDs to each row.

See the package documentation for every option.

Before you use it

  • This is a pre-1.0 release. The exported API may still change before v1.0.0, including helpers such as BatchProcessor, FormatContentParts, SmartTruncate and ArrowSchema. The path to v1.0.0 is tracked in #2014.
  • Register it before plugins that replace results. ADK stops at the first plugin callback that returns a replacement event, model response or tool result, so the analytics plugin does not see what an earlier plugin replaced.
  • Known differences from adk-python are listed in #2046 and #2047. For example, when a callback recovers a failed tool call, Go logs TOOL_ERROR followed by TOOL_COMPLETED, while Python logs only TOOL_ERROR.

v2.7.0

Choose a tag to compare

@wolo-lab wolo-lab released this 02 Nov 10:37
be8b100

Highlights

v2.7.0 adds Anthropic Claude as a first-party model, search-gated tool discovery for large tool catalogs, an experimental classifier API for workflow routing, and a per-invocation budget on model calls. It also switches telemetry to the OpenTelemetry GenAI semantic conventions by default, which is a breaking change for anyone consuming ADK traces.

  • Anthropic Claude models (experimental): model/anthropicmodel implements model.LLM over the Anthropic Messages API and Vertex AI, with streaming, tool calling, image and PDF input, extended and adaptive thinking, structured output and prompt caching. See examples/anthropic. (#1866)
  • Search-gated tool discovery: tool/toolsearch wraps any tool.Toolset so the model starts with a search_tools tool plus a configured core set, and the tools it finds are declared from the next model step on. This keeps a large MCP catalog out of every request. See examples/toolsearch. (#1734, #1735)
  • Classifiers (experimental): exp/classifier defines a Classifier that answers typed Choice, Binary and Score questions with probabilities. It ships with a client for TypeSafe's Jev decision models (exp/classifier/typesafe), an LLMClassifier backed by any model.LLM, and a workflow Node that routes on the answer, matching adk-python's ClassifierNode. (#2003, #2005, #2035)
  • Model-call budget: RunConfig.MaxLLMCalls bounds the model calls one invocation may make, 500 by default, and ends the run with agent.ErrLLMCallsLimitExceeded when the budget is spent. Matches adk-python's max_llm_calls. This changes behavior for existing users, see below. (#1412)
  • Telemetry: traces follow OpenTelemetry GenAI semantic conventions v2 by default, as adk-python does. This is breaking for telemetry consumers, see below. (#1635)
  • OpenAI-compatible models: images and files in InlineData and FileData parts are sent on both the Responses and Chat Completions endpoints (#1543). A response schema title that is not a valid format name falls back to adk_response instead of a 400 from the API (#1912). A GenerateContentConfig field that a newer genai adds is refused with ErrUnsupportedConfigField instead of being dropped silently (#1922).
  • Gemini built-in tools: geminitool.GoogleMaps, geminitool.UrlContext and geminitool.EnterpriseWebSearch. (#2026)
  • MCP: with Config.Auth set, each user gets their own MCP session, so servers that bind a session to the user who opened it stop answering other users with 403 (#1755). MCP HTTP requests identify ADK in User-Agent and X-Goog-Api-Client, as model calls already do (#1862).
  • Auth fix: credentials from auth.ADC() and auth.ServiceAccount() failed every token mint with context canceled on local gcloud ADC and impersonated service accounts. Services on GCE or with a key file were not affected. (#1904)
  • Tool auth groundwork: tool/toolauth adds adk-python's auth data model and wire format for adk_request_credential, so requests, replies and credential keys agree with adk-python and ADK Web. Nothing uses it yet. (#2032)
  • Reliability:
    • Workflow joins resume with completed predecessors restored instead of rerunning them. (#1572)
    • LoopAgent stops on context cancellation. WithAgentTimeout and WithAgentCancel work on tool and callback contexts instead of returning nil. (#1810, #1604)
    • Artifacts saved in agent and model callbacks are recorded in ArtifactDelta. OutputKey is saved when a before-agent callback short-circuits. (#1878, #1800, #1963)
    • Optional instruction placeholders such as {key?} and {artifact.name?} surface infrastructure errors instead of rendering an empty string. This changes behavior, see below. (#1748)
    • Vertex AI sessions persist live transcriptions. In-memory memory search skips thought parts. (#1964, #1975)
    • Streaming function tools preserve consumer panics. agenttool keeps code-execution output in sub-agent results. Running an agent without Run returns an error instead of doing nothing. (#1961, #1860, #1850)
    • launcher.Config.TelemetryOptions honors WithOtelToCloud. Live reconnect matches close code 1008 by type, not by error text. (#1968, #1993)
  • CLI: adkgo deploy agentengine --mem_deploy no longer defaults Memory Bank to gemini-2.5-flash, which Vertex AI stopped serving to new projects. Memory Bank applies its own default model unless --mem_model is set. (#1902)
  • Agent Analytics plugin (plugin/agentanalytics, its own module and tag): aligned with adk-python's schema and event vocabulary, with rich session, HITL, A2A and workflow events, GCS offloading of multimodal content, opt-in exactly-once delivery, drop statistics, hierarchical span ids with latency and time-to-first-token, and 25 pre-built per-event BigQuery views. (#1786, #1787, #1788, #1789, #1790, #1791 and follow-up fixes)

Breaking changes

  • Telemetry schema: ADK now emits the OpenTelemetry GenAI semantic conventions v2. The legacy log events are replaced by one gen_ai.client.inference.operation.details event per model call, message content on spans is a structured value rather than a JSON string, execute_tool records arguments and results only when span content capture is on (under gen_ai.tool.call.*), and an LLM-agent root gets a new invoke_workflow parent span. Set ADK_TELEMETRY_SCHEMA_VERSION_OPT_IN=otel_semconv_1_36 to restore the previous format, supported until at least March 31, 2027. (#1635)
  • Model calls are capped at 500 per invocation: a run that makes more than 500 model calls now ends with an error wrapping agent.ErrLLMCallsLimitExceeded. Raise the cap with RunConfig.MaxLLMCalls or ADK_MAX_LLM_CALLS, or set MaxLLMCalls to -1 for no limit. Unlike adk-python, 0 means the default, not unlimited. (#1412)
  • Optional instruction placeholders propagate errors: {key?} and {artifact.name?} render empty only when the key or artifact is missing (session.ErrStateKeyNotExist, fs.ErrNotExist). Any other error from the session or artifact service now fails the run. A custom artifact.Service must wrap fs.ErrNotExist for missing files, and an agenttool sub-agent with an optional artifact placeholder now errors when the root runner has no artifact service. (#1748)
  • Go 1.26.10 is required: go.mod moves from 1.26.6 to 1.26.10. (#1916)
  • Agent Analytics plugin defaults: the default table name is agent_events instead of events, existing tables are upgraded additively on startup unless DisableSchemaUpgrade is set, the per-event views are created on startup unless DisableCreateViews is set, and granular event types (STATE_DELTA, AGENT_TRANSFER, HITL_*, NODE_OUTPUT, …) replace the generic EVENT row. These apply when the plugin module is next tagged, not to the core v2.7.0 tag. (#1786, #1788, #1791)

Smaller behavior changes:

  • geminitool.GoogleSearch returns an error on a non-Gemini model, and on a Gemini 1.x model combined with other tools. (#2026)
  • launcher: passing telemetry.WithOtelToCloud(true) in TelemetryOptions now exports to Google Cloud and needs credentials at startup, where it used to start with export silently off. (#1968)
  • openaimodel: a config field added by a genai release newer than v1.74.0 is refused with ErrUnsupportedConfigField. Configs valid today are unaffected. (#1922)
  • mcptoolset with Config.Auth opens one session per distinct credential, closes sessions idle for 10 minutes, and caps the pool at 64. Without Auth nothing changes. (#1755)
  • LoopAgent yields the context error once and stops when its context is cancelled, where it used to keep looping if no pass yielded an event. (#1810)
  • An agent callback that saves an artifact and returns nil now yields one event carrying the ArtifactDelta, where it yielded none. (#1878)
  • The in-memory memory service no longer stores or matches thought parts, and an event with only thought text is not stored. (#1975)
  • Deprecated: artifact.SaveRequest.Version. Save has never read it. (#1985)
All changes

What's Changed

  • feat(tool): add search-gated tool discovery by @wolo-lab in #1734
  • docs(examples/toolsearch): add a tool search sample by @wolo-lab in #1735
  • fix(agent): report an error when an agent without Run is run by @wolo-lab in #1850
  • docs(artifact): fix service references in doc comments by @ktsoator in #1775
  • feat(agentanalytics): align schema, event vocabulary, redaction, and core contract with adk-python by @haiyuan-eng-google in #1786
  • fix(loopagent): stop on context cancellation by @anzal1 in #1810
  • feat(runner): bound model calls per invocation with RunConfig.MaxLLMCalls by @venkat-uk in #1412
  • fix(llminternal): prevent silent context degradation by propagating systemic state failures by @karthik-0306 in #1748
  • test(model/gemini): pin the last citation and accepting AutomaticContinuation by @baptmont in #1825
  • test(llminternal): match isResumable's doc and test table to the errors it sees by @harshitwandhare in #1750
  • docs(loopagent): say the context is checked before each pass by @anzal1 in #1861
  • refactor(workflow): remove redundant goroutine in scheduleRetry by @moodbased in #1849
  • docs(compaction): list the GenerateContentConfig fields the summarizer uses by @karolpiotrowicz in #1828
  • fix(agenttool): preserve code output in sub-agent results by @ktsoator in https:...
Read more

v1.9.0

Choose a tag to compare

@wolo-lab wolo-lab released this 15 Oct 13:39
08beb78

What's Changed

Full Changelog: v1.8.0...v1.9.0

v2.6.0

Choose a tag to compare

@wojtas000 wojtas000 released this 13 Oct 14:09
5226417

Highlights (released Oct 13)

  • Gemini 4 Argon support: Gemini 4 models such as gemini-4-argon stop long answers at a per-request output limit. ADK now resumes these answers automatically, so they come back whole instead of cut off. The resuming is now done by the genai SDK (v1.74.0). (#1715, #1759, #1822)
  • Auth: credentials are refreshed and the call retried once after a downstream 401/403. Remote A2A agents accept per-request auth through Config.Auth. (#1136, #1150)
  • MCP: request-scoped metadata is passed on to MCP tool calls. Callers can close MCP sessions, waiting for a session respects context cancellation, and connection config is checked when the toolset is built. (#1429, #1713, #1717, #1687)
  • Server hardening: every web launcher route checks Host and Origin. /run_live limits message size, dead peers and concurrent sessions. The Pub/Sub and Eventarc trigger endpoints can require a Google OIDC token, and MaxConcurrentRuns is now enforced. (#1641, #1648, #1737, #1720)
  • New experimental endpoint: /apps/{app_name}/app-info. (#1404)
  • Privacy fix: session-scoped artifact filenames no longer show up in shared listings, both in-memory and on GCS. (#1673, #1708)
  • Reliability:
    • Loop and sequential agents stop when a sub-agent fails. This changes behavior for existing users.
    • Toolsets are re-evaluated on every step.
    • Concurrency fixes in the session database, the in-memory session store and artifact saves.
    • Vertex AI sessions now keep code-execution parts.
    • (#1684, #785, #1743, #1575, #1756, #1729)

What's Changed

  • fix(artifact): keep session filenames out of shared listings by @ktsoator in #1673
  • test(workflow): enable TestRunNode_ErrInvalidRunNodeContext_OnStaticContext by @sushant-me in #1679
  • fix(mcptoolset): validate connection configuration during construction by @ktsoator in #1687
  • test(telemetry): replace hand-written telemetry expectations with record/replay goldens by @RKest in #1640
  • fix(workflow): build route edges in a deterministic order by @wolo-lab in #1268
  • fix(workflow): single-flight RunNode idempotency cache by @wolo-lab in #1043
  • fix(skilltoolset): count skill metadata limits in runes by @Harbor404 in #1709
  • fix(artifact): keep session filenames out of GCS shared listings by @ktsoator in #1708
  • fix(launcher): check Host and Origin on every web launcher route by @jjsasha63 in #1641
  • chore(deps): bump google.golang.org/genai from 1.71.0 to 1.72.0 by @baptmont in #1714
  • feat(remoteagent): apply per-request auth to A2A via Config.Auth by @wolo-lab in #1150
  • fix(utils): respect Nullable field on nil values during schema validation by @moritzwilhelm in #1566
  • fix(examples): return an error for missing image data by @ktsoator in #1509
  • test(compaction): actually run two writers at once by @baptmont in #1485
  • fix(server): default a zero SSE write timeout to 120s by @Vivek1106-04 in #1686
  • fix(llminternal): re-evaluate toolsets on every step in toolProcessor by @nuthalapativarun in #785
  • docs(workflow): correct doc comments that describe fields and behaviour that do not exist by @sushant-me in #1711
  • chore(deps): bump the go-minor-patch group with 5 updates by @dependabot[bot] in #1725
  • fix(session/inmemory): holding sess.mu accross the eventCopy creation in AppendEvent by @dhakad22klx in #1575
  • fix(runner): preserve buffered live events at stream end by @Ultronen in #1547
  • fix(llmagent): clone Tools and Toolsets slices in constructor to prevent backing array aliasing by @somuai in #1493
  • fix(session/database): surface JSON marshal errors on state writes by @Huang-404-Q in #1551
  • fix(llminternal): classify a dropped live connection by type, not error text by @harshitwandhare in #1603
  • fix(mcptoolset): allow callers to close MCP sessions by @ktsoator in #1713
  • fix(llminternal): omit foreign thoughts from agent context by @jabrailkhalil in #1719
  • fix(mcptoolset): honor context cancellation while waiting for sessions by @via2004 in #1717
  • docs: fix stale method names in doc comments by @PratikDhanave in #1721
  • fix(server/triggers): honor MaxConcurrentRuns in PubSubController by @PratikDhanave in #1720
  • chore(lint): forbid process-wide logging in library code by @jjsasha63 in #1649
  • fix(sequentialagent): serialize live completion tool injection by @jabrailkhalil in #1722
  • fix(llminternal): leave ${var} and {var} placeholders literal by @Vivek1106-04 in #1682
  • docs(memory): fix stale "string" wording on MemoryEntry.Timestamp by @PratikDhanave in #1745
  • test(agentanalytics): cover the retry that opens a fresh stream by @Trainingcqy in #1527
  • fix(vertexai): preserve ExecutableCode and CodeExecutionResult in session storage by @karthik-0306 in #1729
  • test(examples): cover image precedence and empty results by @ktsoator in #1567
  • fix(model/gemini): preserve empty text on thought-signature parts by @adilalperenciftci in #1639
  • feat(mcptoolset): forward request-scoped metadata to MCP tool calls by @jjsasha63 in #1429
  • fix(workflowagents): stop loop and sequential agents on sub-agent error by @Vivek1106-04 in #1684
  • fix(adkrest): render nested workflow clusters in graph images by @leilei3167 in #1724
  • fix(adkrest): bound /run_live messages, dead peers and concurrent sessions by @jjsasha63 in #1648
  • test(vertexai): keep RPC replay independent of external network by @Ultronen in #1548
  • fix(memory): normalize punctuation in in-memory search by @tejas5038 in #1565
  • chore(lint): add misspell linter and perform US spelling sweep by @somuai in #1465
  • test(llminternal): cover the nil RunConfig branch in callLLM by @baptmont in #1368
  • fix(session/database): lock app and user state rows in AppendEvent by @Vivek1106-04 in #1743
  • test(llmagent): drive tail retention end to end against a recorded model by @baptmont in #1438
  • fix(runner): preserve BeforeRun plugin responses by @ktsoator in #1598
  • fix(agent): synchronize concurrent artifact saves by @ktsoator in #1756
  • docs(workflow): fix Run signature in NewRequestInputEvent example by @PratikDhanave in #1746
  • refactor(agent): remove redundant Context method declarations by @moodbased in #1758
  • docs(agent): clarify agent callback error behavior by @ktsoator in #1761
  • chore(deps): bump the go-minor-patch group with 12 updates by @dependabot[bot] in #1798
  • fix(llminternal): correct misleading "global" in appendInstructions error by @PratikDhanave in #1804
  • fix(agenttool): wrap the runner.New error instead of discarding it by @PratikDhanave in #1803
  • docs(telemetry): fix StartNodeSpan doc for invoke_workflow by @PratikDhanave in #1805
  • fix(llminternal): guard nil first candidate in streaming aggregator by @PratikDhanave in #1802
  • docs(mcptoolset): fix constructor example and schema comment by @ktsoator in #1779
  • feat(exp): add the experimental /apps/{app_name}/app-info endpoint by @wojtas000 in #1404
  • fix(loopagent): return when there are no sub-agents by @anzal1 in #1780
  • chore(deps): bump google.golang.org/grpc from 1.83.1 to 1.83.2 in /plugin/agentanalytics in the go_modules group across 1 directory by @dependabot[bot] in #1814
  • Align vertexai session service via ADK REST API with other impl by @kdroste-google in #1571
  • fix: reject Cloud Run service name beginning with '-' by @herdiyana256 in #1505
  • chore(version): bump the tagged version constant to 2.6.0 by @wolo-lab in #1817
  • feat(auth): refresh and retry once on a downstream 401/403 by @wolo-lab in #1136
  • docs(artifact): clarify missing-version deletion behavior by @ktsoator in #1767
  • fix(r...
Read more

v1.8.0

Choose a tag to compare

@wolo-lab wolo-lab released this 05 Oct 06:51
f24ac2f

What's Changed

Full Changelog: v1.7.0...v1.8.0

v2.5.0

Choose a tag to compare

@wolo-lab wolo-lab released this 30 Sep 17:22
60216c0

What's Changed

  • fix(internal/utils): skip nil Parts in the Parts accessors by @dhakad22klx in #1556
  • fix(sequentialagent): recurse task_completed injection and rebind Agent in Run and RunLive by @somuai in #1510
  • fix(remoteagent): respect isolation scope by @Soundcreates in #1259
  • fix(remoteagent): render unmatched function responses as text by @leilei3167 in #1494
  • test(session): add concurrent regression test for State.All() by @nuthalapativarun in #725
  • fix(telemetry): include tool-use prompt tokens in input_tokens by @peterkarabinovic in #1525
  • chore(deps): bump the go-minor-patch group with 6 updates by @dependabot[bot] in #1592
  • fix(session/inmemory): strip temp: keys from the canonical event record by @jordigilh in #1356
  • fix(launcher/api): serve run_live through the API mount again by @jjsasha63 in #1533
  • fix(session/vertexai): strip temp: keys before AppendEvent persist by @leilei3167 in #1514
  • fix(model/openaimodel): pin function tools to non-strict validation by @hanorik in #1389
  • fix(cmd/launcher/web): defer telemetry shutdown and adjust startup logging (#1469) by @chill-czar in #1470
  • fix(model/openaimodel): source the streamed function name from output_item.added by @dependabot[bot] in #1616
  • fix(adkrest): refuse DNS-rebinding hosts and cross-origin browsers by @jjsasha63 in #1615
  • fix(web): bind web server to loopback by default by @AARUSHGAUR in #1456
  • fix: map response finish reasons to semantic conventions by @mikemikimike in #1474
  • fix(model/openaimodel): give property-less objects the strict-schema keys by @wojtas000 in #1614
  • fix(launcher): declare the web bind address to the REST server by @jjsasha63 in #1623
  • fix(llminternal): bound RunLive's reconnect loop by @jjsasha63 in #1621
  • fix(tool): apply WithConfirmation to streaming tools by @jjsasha63 in #1596
  • fix(adkgo/deploy): use a long timeout for Agent Engine op.Wait by @nuthalapativarun in #1590
  • fix(functiontool): wrap non-map results only when they can be marshaled by @Trainingcqy in #1586
  • fix(agent): keep the invocation when WithICDelta returns nil by @wolo-lab in #1521
  • ci: require a linked issue, and document stale pull request takeover by @jjsasha63 in #1593
  • fix(model/openaimodel): stop replaying prior-turn reasoning to the API by @hanorik in #1395
  • feat(agent): recover the invocation identity from a plain context by @wolo-lab in #1522
  • fix(exampletool): skip example injection when the invocation has no user content by @rishabhsai in #1573
  • fix(workflow): stop yielding after consumer exits by @cruvie in #1550
  • fix(adkrest): declare UTF-8 charset on the SSE content type by @baptmont in #1629
  • test(launcher/web): bind the exact server address in bind-failure tests by @Vivek1106-04 in #1638
  • feat(authn): add a Google OIDC authenticator by @herdiyana256 in #1636
  • test(authn): pin the audience a Google OIDC authenticator enforces by @wolo-lab in #1646
  • fix(loadartifactstool): stop double-wrapping the artifact load error by @rishabhsai in #1574
  • fix(llminternal): build arrays when assembling streamed function call arguments by @ashrodan in #1630
  • feat(auth/gcp): add GCP credential provider by @wolo-lab in #1173
  • chore(deps): bump the go-minor-patch group with 4 updates by @dependabot[bot] in #1653
  • fix(launcher): pin the webui-before-api order, and clarify the adk-web pin by @jjsasha63 in #1536
  • fix(adkrest): gate the agent graph routes behind IncludeDebugAPI by @jjsasha63 in #1534
  • fix: skip nil responses in generateContent by @koriyoshi2041 in #630
  • fix(adkrest,web): limit request body size to mitigate memory-exhaustion DoS by @AARUSHGAUR in #1457
  • feat(auth): add CredentialStore and cache GCP credentials by @wolo-lab in #1174
  • fix: preserve orphan response content during rearrangement by @ktsoator in #1564
  • test(auth): make arm() force a sweep on a coarse clock by @harshitwandhare in #1668
  • fix(llminternal): drop unanswered function calls from request contents by @QuentinBisson in #1669
  • docs(session/database): document that AutoMigrate must run on every startup by @wolo-lab in #1670
  • fix(agenttool): share artifacts with parent agents by @ktsoator in #1654
  • refactor(llmagent): give State.IncludeContents an internal type by @jjsasha63 in #1462
  • fix(auth/gcp): pin the default builder's context, and correct its comments by @wolo-lab in #1647
  • fix(adkrest): limit /run_live WebSocket message size by @prasanna8585 in #1664
  • feat(artifact): guarantee artifact version metadata by @yiaany in #1440
  • docs(session): clarify that state prefixes do not compose by @indurireddy-TF in #1674
  • fix(session/database): persist input and output transcriptions by @Vivek1106-04 in #1662
  • feat(openaimodel): support the Chat Completions API by @wojtas000 in #1642
  • refactor(openaimodel): split Chat Completions and Responses endpoints into sub-packages by @wojtas000 in #1643
  • test: keep model registry and llminternal logging tests repeatable by @Vivek1106-04 in #1657
  • chore(version): bump the tagged version constant to 2.5.0 by @wolo-lab in #1677
  • fix(agentengine): base64-encode []byte fields instead of failing thei… by @rizukijr in #1387
  • feat: Add daily time partitioning to BigQuery event logging table by @vasilyl in #1377

Breaking changes

  • Session tables gain two columns (#1662): session/database now stores live-audio input and output transcriptions, in two new nullable columns on the events table. DatabaseSessionService never creates or alters tables on its own, so call database.AutoMigrate on every startup. A database that is not migrated fails to write events once this release is deployed. If you manage the schema by hand, add input_transcription and output_transcription before you deploy. See Sessions: DatabaseSessionService.
  • adk web listens on loopback by default (#1456): the web launcher binds 127.0.0.1 instead of every interface. Pass -host 0.0.0.0 to restore the old behavior. You need that flag inside a container and whenever another machine must reach the server. Dockerfiles generated by adkgo deploy already pass it. A Dockerfile you wrote yourself needs it added.
  • Cross-origin browser requests are refused (#1615, #1623): the REST server and the /run_live WebSocket now answer 403 to a browser whose Origin is neither the server's own nor the one given in -webui_address. On a loopback bind they also answer 403 to a request whose Host is not a loopback name, which blocks DNS-rebinding attacks. Non-browser clients and same-origin pages are unaffected. If you serve the UI from another origin, set -webui_address to it. If you embed adkrest.NewServer behind a reverse proxy on the same machine, add the proxy's origin to the new ServerConfig.AllowedOrigins. '*' turns the checks off.
  • Request size limits (#1457, #1664): the REST server and every route behind the web launcher, including the Pub/Sub and Eventarc triggers, reject request bodies over 10 MiB with HTTP 400. Raise the limit with -max_request_body_size, launcher.Config.MaxPayloadSize or adkrest.ServerConfig.MaxPayloadSize. /run_live closes the connection on any single WebSocket message over 16 MiB. That limit is not configurable.
  • Agent graph routes require the debug API (#1534): build_graph and build_graph_image return the agent tree and every tool it can call, so they are now registered only when IncludeDebugAPI ...
Read more

v1.7.0

Choose a tag to compare

@wolo-lab wolo-lab released this 14 Sep 10:22
70ff861

What's Changed

Full Changelog: v1.6.1...v1.7.0

v2.4.0

Choose a tag to compare

@wolo-lab wolo-lab released this 11 Sep 14:14
4e57df4

What's Changed

  • fix: pin a fetched agent card's interface URL(s) to the origin it was fetched from by @prasanna8585 in #1418
  • feat(session/database): add NewSessionServiceFromDB constructor by @nuthalapativarun in #724
  • fix(openaimodel): support optional function call output IDs by @ktsoator in #1449
  • fix(workflow): normalize unordered set keywords in schema comparison by @winklemad in #1138
  • fix: prevent saving non-text events to state by @tanghaowillow in #1061
  • fix: resolve 'TODO: last event is not final' error in streaming mode … by @mahendrarathore1742 in #638
  • chore(deps): bump google.golang.org/grpc from 1.82.1 to 1.83.1 in /plugin/agentanalytics in the go_modules group across 1 directory by @dependabot[bot] in #1468
  • ci: Release automation with release-please by @wojtas000 in #1398
  • fix(remoteagent/v2): run after-callbacks on aggregated artifact events by @PratikDhanave in #1206
  • docs(agent): explain why runAfterAgentCallbacks does not end the invocation by @jjsasha63 in #1461
  • fix(mcptoolset): allow valid empty text tool responses (#1352) by @chill-czar in #1353
  • fix(cmd/launcher/web): initialize telemetry before starting HTTP server (#1350) by @chill-czar in #1351
  • fix(workflow): make ParallelWorker fail-fast actually stop new dispatch under maxConcurrency by @AmirF194 in #1239
  • fix(openaimodel): preserve caller-owned JSON schemas by @ktsoator in #1451
  • fix(mcptoolset): report non-text-only tool results instead of dropping them by @jjsasha63 in #1473
  • fix: agenttool SkipSummarization terminates parent agent loop by @rsd-darshan in #908
  • ci: run the Go workflow on every pull request by @wolo-lab in #1445
  • fix(session): report a missing session as session.ErrNotFound by @jjsasha63 in #1458
  • fix(adkrest): serve the endpoints the ADK web UI actually calls by @jjsasha63 in #1459
  • fix(launcher/web): default the artifact and memory services, and serve the UI correctly by @jjsasha63 in #1460
  • ci: ask for a linked issue or a description on new PRs by @jjsasha63 in #1480
  • ci: automate v1 backports from the v1-needed label by @baptmont in #1327
  • docs: ask the two PR-template questions that catch the most defects by @karolpiotrowicz in #1506
  • docs(examples): update launcher documentation by @ktsoator in #1496
  • fix(runner): stop nil event loops after cancellation by @wmh123wmh1 in #1479
  • fix(llmagent): resolve agent mode per placement instead of mutating the shared agent by @wolo-lab in #1267
  • fix(workflow): suppress retries while draining by @cruvie in #1512
  • chore(deps): bump the go-minor-patch group with 12 updates by @dependabot[bot] in #1517
  • fix(auth): keep the consent URI out of ConsentRequiredError's message by @wolo-lab in #1519
  • fix(openaimodel): preserve refusals and completed stream content by @ktsoator in #1467
  • docs: state the pre-PR checks that reviews keep catching by @karolpiotrowicz in #1492
  • fix(memory): rank and limit search results with non-ASCII substring matching by @ktsoator in #1528
  • fix(model/openaimodel): correct finish reason, logprobs and tool calls when a stream ends by @hanorik in #1373
  • fix(backport): stop re-posting the conflict comment on every run by @baptmont in #1530
  • fix(mcptoolset): render non-text unstructured tool results by @ktsoator in #1401
  • fix: ignore stale function responses by @gustafvh in #766
  • fix(model/openaimodel): surface server-side response failures by @hanorik in #1359
  • fix(model/openaimodel): account for every generation config field by @hanorik in #1392
  • docs: fix contributing links in PR template by @keeltrace in #1545
  • fix: validate deploy CLI values embedded in generated Dockerfile content by @herdiyana256 in #1240
  • docs: add a self-review gate and the conventions reviews keep repeating by @wolo-lab in #1558
  • fix(session): snapshot events under read lock in database and vertexa… by @lucky798213 in #1559
  • fix(examples): validate generated image responses by @ktsoator in #1478
  • fix(auth/gcp): keep caller identifiers out of service error text by @wolo-lab in #1520
  • feat(adkrest): add authentication and authorization to the REST API by @kdroste-google in #1561
  • fix(llminternal): keep a late tool completion as the final content by @jjsasha63 in #1428
  • test(adkrest/models): add EventActions field mapping coverage by @nuthalapativarun in #726
  • test(adkrest): add RunLiveHandler WebSocket integration coverage by @wmh123wmh1 in #1453
  • fix(agentanalytics): drain the aborted write stream to recover the append status by @Trainingcqy in #1318
  • fix(artifact/gcsartifact): return the gs:// form as CanonicalURI by @baptmont in #1563
  • cleanup: update Loader documentation and add interface checks by @hyangah in #651
  • chore(version): bump the tagged version constant to 2.4.0 by @wolo-lab in #1570

New Contributors

Full Changelog: v2.3.0...v2.4.0

v1.6.1

Choose a tag to compare

@wolo-lab wolo-lab released this 07 Sep 08:22
62369f2

What's Changed

New Contributors

  • @github-actions[bot] made their first contribution in #1486

Full Changelog: v1.6.0...v1.6.1

⌂ 换网址