pub struct SchemaCache { /* private fields */ }Expand description
A thread-safe cache for normalized JSON Schemas.
Stores normalized schemas keyed by a 64-bit hash of the serialized input schema.
This avoids re-running normalization transforms on unchanged schemas across
repeated generate_content() calls.
§Thread Safety
Uses std::sync::Mutex internally, making it safe to share across threads.
The lock is held only briefly during hash lookup and insertion.
§Placement
Intended to live on model instances so each provider adapter maintains its own cache of normalized schemas.
Implementations§
Source§impl SchemaCache
impl SchemaCache
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new empty schema cache.
§Example
use adk_core::SchemaCache;
let cache = SchemaCache::new();Sourcepub fn get_or_normalize(
&self,
schema: &Value,
adapter: &dyn SchemaAdapter,
) -> Value
pub fn get_or_normalize( &self, schema: &Value, adapter: &dyn SchemaAdapter, ) -> Value
Returns the normalized schema for the given input, using the cache if available.
If the schema has been normalized before (based on content hash), the cached
result is returned. Otherwise, adapter.normalize_schema() is called and the
result is stored in the cache.
§Arguments
schema- The raw JSON Schema to normalize.adapter- The provider-specific schema adapter to use for normalization.
§Returns
The normalized JSON Schema value.
§Example
use adk_core::{SchemaCache, SchemaAdapter, GenericSchemaAdapter};
use serde_json::json;
let cache = SchemaCache::new();
let adapter = GenericSchemaAdapter;
let schema = json!({"$schema": "draft-07", "type": "string"});
let normalized = cache.get_or_normalize(&schema, &adapter);
assert!(normalized.get("$schema").is_none());Sourcepub fn clear(&self)
pub fn clear(&self)
Clears all cached entries.
Call this when the set of tools changes (e.g., MCP server advertises updated schemas) to force re-normalization on the next request.
§Example
use adk_core::{SchemaCache, GenericSchemaAdapter};
use serde_json::json;
let cache = SchemaCache::new();
let adapter = GenericSchemaAdapter;
let schema = json!({"type": "string"});
// Populate cache
cache.get_or_normalize(&schema, &adapter);
// Invalidate all entries
cache.clear();