v2.6.9

agno-agi/agnov2.6.9May 21, 2026by ysolanky

AI Summary

Focuses on improvements to PostgreSQL vector search (prefix matching), fixing Claude parameter handling, and exposing approval records in post-hooks for better observability.

Key Highlights

  • PgVector `prefix_match=True` now works correctly
  • Claude temperature/top_p/top_k=0 is now honored
  • Resolved approval records exposed in `run_response.metadata['approval']`

New Features

  • Approval resolved record exposure to post-hooks

Full Release Notes

# Changelog

## New Features:

- **Approvals - Resolved Approval in Post-Hooks:** Post-hooks and observability integrations can now read the full resolved approval record (`resolved_by`, `resolved_at`, etc.) via `run_response.metadata["approval"]`. Previously only `status` and `resolution_data` were exposed. Lives in `metadata` so it works uniformly across `RunOutput` / `TeamRunOutput` / future `WorkflowRunOutput`. (#7366, #8032)

## Improvements:

- **PgVector - prefix_match=True actually works:** `PgVector(prefix_match=True)` was a silent no-op - it appended `*` then routed through `websearch_to_tsquery`, which ignores wildcards. Now routes through `to_tsquery('tok:*')` with proper tokenization, so partial queries like `"ani"` FTS-match `"animal"` as documented. New cookbook `cookbook/07_knowledge/04_advanced/06_prefix_search.py` shows the help-center typeahead use case. (#8048, #8051, #8052)
- **PgVector - empty-tsquery fallback robustness:** Replaced the `to_tsquery(language, '')` fallback with a literal `''::tsquery` cast so behavior no longer depends on the parser tolerating empty input. (#8053)
- **Claude variants - temperature/top_p/top_k = 0 honored:** Anthropic, AWS, and VertexAI Claude variants were silently dropping `0.0` values due to bare truthiness checks. Switched to `is not None` so deterministic output works as intended. (#8009, fixes #8004)
- **Calendar & Gmail context providers - clean instruction layering:** Trimmed `DEFAULT_READ_INSTRUCTIONS` / `DEFAULT_WRITE_INSTRUCTIONS` from 157 lines to 27 by removing content already supplied by the toolkit-side instructions. Provider now owns role + safety; toolkit owns the technical reference. (#7982)
- **decision_log - drop deprecated `datetime.utcnow()`:** Replaced with `datetime.now(timezone.utc)` to clear the Python 3.12 deprecation warning. (Closes #8030)
- **Chonkie:** Bumped to `>=1.6.7` to pick up the upstream language auto-detection fix; removed the temporary test workarounds from #7904. (#8012)

## Bug Fixes:

- **GeminiInteractions - server-side tool calls leaking onto the agent path:** On the agent path (Antigravity, Deep Research), `FunctionCallStep`s describe tools the autonomous loop runs inside the server-managed sandbox. Previously we surfaced them as local `tool_calls`, leading to `Function <name> not found` and follow-up `400 invalid_request` errors. Gated the `FunctionCallStep` branch on `self.agent is None` for both streaming and non-streaming. Model path with user-declared tools is unchanged. (#8045)
- **Claude (Anthropic / AWS / VertexAI) - `temperature=0` silently dropped:** See Improvements. Every prior release silently fell back to API defaults (~1.0) when callers explicitly set `0`. (#8009, fixes #8004)


## What's Changed
* [FIX] Add UTM parameters to links in README by @kyleaton in https://github.com/agno-agi/agno/pull/8010
* chore: bump chonkie to `>=1.6.7` by @sannya-singal in https://github.com/agno-agi/agno/pull/8012
* cookbook: data_labeling on Gemini + quality review as Workflow by @ashpreetbedi in https://github.com/agno-agi/agno/pull/8024
* feat: expose resolved approval record to post-hooks via metadata by @brandon-agsys in https://github.com/agno-agi/agno/pull/7366
* refactor: move resolved approval from typed field to metadata bag by @ysolanky in https://github.com/agno-agi/agno/pull/8032
* cookbook: image search demo on Gemini + AgentOS by @ashpreetbedi in https://github.com/agno-agi/agno/pull/8035
* fix: replace deprecated datetime.utcnow() with datetime.now(timezone.utc) in decision_log.py by @Ghraven in https://github.com/agno-agi/agno/pull/8031
* fix(pgvector): make prefix_match=True actually do prefix matching by @ashpreetbedi in https://github.com/agno-agi/agno/pull/8048
* [cookbook] Fix Google Calendar spelling by @lil-goat in https://github.com/agno-agi/agno/pull/8047
* fix: use is not None for temperature/top_p/top_k across all Claude variants by @VANDRANKI in https://github.com/agno-agi/agno/pull/8009
* cookbook: swap image_search from ChromaDb to PgVector by @ashpreetbedi in https://github.com/agno-agi/agno/pull/8036
* fix(pgvector): use literal empty tsquery for hybrid_search fallback by @ysolanky in https://github.com/agno-agi/agno/pull/8053
* cookbook: enable prefix_match=True on image_search PgVector by @ashpreetbedi in https://github.com/agno-agi/agno/pull/8052
* refactor: simplify Calendar and Gmail context provider instructions by @Mustafa-Esoofally in https://github.com/agno-agi/agno/pull/7982
* cookbook: add pgvector prefix_match example and improved comments by @Mustafa-Esoofally in https://github.com/agno-agi/agno/pull/8051
* fix: skip server-side tool calls on GeminiInteractions agent path by @ysolanky in https://github.com/agno-agi/agno/pull/8045
* chore: Release v2.6.9 by @kausmeows in https://github.com/agno-agi/agno/pull/8042

## New Contributors
* @brandon-agsys made their first contribution in https://github.com/agno-agi/agno/pull/7366
* @Ghraven made their first contribution in https://github.com/agno-agi/agno/pull/8031
* @lil-goat made their first contribution in https://github.com/agno-agi/agno/pull/8047
* @VANDRANKI made their first contribution in https://github.com/agno-agi/agno/pull/8009

**Full Changelog**: https://github.com/agno-agi/agno/compare/v2.6.8...v2.6.9