#[0.12.0] - 2026-03-23
This release adds the Google Drive plugin, significantly upgrades the Memory plugin with LLM-powered reranking, query routing, and fact extraction, expands database plugins with count_rows / sample_rows / query_history tools, introduces SnowflakeAdminPlugin, and completes a sweeping standardization of tool function signatures and plugin lifecycle interfaces across the entire plugin catalog.
#Added
-
Google Drive Plugin (
from daita.plugins import google_drive)- Full read/write plugin for Google Drive backed by the Google Drive API v3
- Supports OAuth 2.0 user credentials and service account key files; credential flow is handled automatically on
connect() - Agent tools:
search_drive(full-text and metadata search),read_drive_file(content extraction),list_drive_folder,get_drive_file_info,download_drive_file,upload_drive_file,organize_drive_files - Automatic format detection and content extraction for Google Docs/Sheets/Slides (exported as text/CSV), XLSX, DOCX, PDF, and plain text
- Programmatic API:
search(),read(),list_folder(),get_info(),download(),upload(),organize() - All blocking Drive SDK calls are offloaded to a thread executor so the async event loop is never blocked
- Install with:
pip install 'daita-agents[google]'
-
Memory Plugin: LLM-Powered Reranking (
enable_reranking=True)- New
MemoryRerankerapplies a lightweight LLM scoring pass over the top recall candidates, re-ordering results by semantic relevance before returning them to the agent - Opt-in via
MemoryPlugin(enable_reranking=True, curator=...); requires a curator agent with an attached LLM - Improves recall precision at the cost of an additional LLM call per query
- New
-
Memory Plugin: Fact Extraction (
enable_fact_extraction=True)- New
FactExtractorparses free-form memory content at ingestion time and stores structuredExtractedFactrecords in the memory's metadata underextracted_facts - Facts capture entities, relationships, dates, and numerical values for richer temporal and relational recall
- Opt-in via
MemoryPlugin(enable_fact_extraction=True, curator=...); requires a curator agent FactExtractor.facts_to_metadata()utility serialises facts to the standard metadata dict format
- New
-
Memory Plugin: Query Router
- New
QueryRouterclassifies incoming recall queries into semantic categories (QueryRoute) to allow backend-specific retrieval strategies - Used internally by
MemoryPluginto select between vector, keyword, and hybrid recall paths memory()factory function added for concise plugin construction:memory(backend=..., curator=...)
- New
-
Database Plugins:
count_rowsandsample_rowscount_rows(table, filter=None)andsample_rows(table, n=5)programmatic methods added to PostgreSQL, MySQL, MongoDB, and Snowflake plugins (SQLite already had them)- Corresponding agent tools
{plugin}_countand{plugin}_sampleregistered automatically, letting agents quickly inspect table sizes and representative rows without writing raw SQL query_history(limit=20)added to MongoDB and Snowflake to surface recent query activity
-
SnowflakeAdminPlugin- New
SnowflakeAdminPluginsubclass ofSnowflakePluginwith an extended tool set for administrative operations (warehouse management, role inspection, usage monitoring) - Import as
from daita.plugins import snowflakeand instantiate withSnowflakeAdminPlugin(...)
- New
-
BaseDatabasePlugin._compact_column()- New static helper that normalises the varying column descriptor shapes returned by different SQL plugins'
describe()methods into a consistent"colname:datatype:null_status"string - Used internally by schema-summary utilities across PostgreSQL, MySQL, SQLite, and Snowflake
- New static helper that normalises the varying column descriptor shapes returned by different SQL plugins'
-
Slack:
read_slack_messagesTool- New agent tool that reads recent messages from a channel, returning structured message objects with author, timestamp, and text
- Accepts
channel(ID or#name) and optionallimit(default 20)
-
Comprehensive Plugin Unit Tests
- New test modules added for Catalog, Email, Google Drive, MongoDB, Neo4j, Orchestrator, PostgreSQL, Qdrant, REST, S3, and Snowflake plugins
- All tests run against mocked clients — no external services required
- Covers tool registration,
connect()/disconnect()lifecycle, error propagation, and programmatic API surface
#Changed
-
Plugin Lifecycle Standardization
- All plugins now consistently subclass
BasePluginand implementconnect()/disconnect() RedisMessagingPluginrenamed its entry points:start()→connect(),stop()→disconnect(); all internal call sites updated- Context manager
__aenter__/__aexit__now delegate uniformly toconnect()/disconnect()across every plugin
- All plugins now consistently subclass
-
Tool Function Signature Standardization
- Tool handler methods (
_tool_*) across all plugins now share a consistent signature:async def _tool_name(self, args: Dict[str, Any]) -> Dict[str, Any] AgentToolregistrations updated throughout the plugin catalog to use uniformparametersJSON Schema shapes, consistentcategory,source,plugin_name, andtimeout_secondsfields- Eliminates the inconsistencies that caused silent tool-call failures when the agent runtime validated tool schemas
- Tool handler methods (
-
S3 Plugin: Error Mapping & Async Safety
- New
_map_s3_error()translates rawbotocoreexceptions to typedPluginError/AuthenticationError/ResourceNotFoundError connect()is now guarded by anasyncio.Lockto prevent duplicate client initialisation under concurrent access- New
_tool_head_objecttool for lightweight existence/metadata checks without downloading object content - All blocking boto3 calls moved to dedicated
_sync_*wrappers executed in a thread pool
- New
-
Slack Plugin: Structured Error Handling
- Authentication failures now raise
AuthenticationError(invalid token, inactive account) rather than bare exceptions - All tool and method-level errors raise typed
PluginErrorwith the plugin name attached
- Authentication failures now raise
-
Elasticsearch, Neo4j, Qdrant, REST, Orchestrator Plugins
- Tool handler signatures and
AgentToolmetadata aligned with the new standard - Error propagation paths cleaned up to use typed exceptions from
daita.core.exceptions
- Tool handler signatures and
#Fixed
-
Tool Schema Validation Failures
- Several plugins registered tools with missing or malformed JSON Schema
parametersblocks, causing the agent runtime to reject them at dispatch time; all schemas are now validated against theAgentToolcontract requiredarrays were missing from several tool schemas, causing the LLM to omit mandatory arguments; these are now explicitly declared
- Several plugins registered tools with missing or malformed JSON Schema
-
Redis Plugin Interface Contract
RedisMessagingPlugindid not inherit fromBasePlugin, causing it to be silently skipped by plugin lifecycle managers; now properly integrated