name: cau-langcache description: Typed wrapper for Redis LangCache (managed semantic cache) with singleton pattern and a generic search/set/delete/flush interface. Use when the user needs semantic caching of LLM/agent responses. metadata: author: prasan version: "0.1.0" repo: git@github.com:PrasanKumar93/custom-agent-utils.git path: packages/cau-langcache dest: packages/cau-langcache
cau-langcache
Typed facade over the @redis-ai/langcache SDK with a singleton pattern, so consumers never import the SDK directly and the underlying beta SDK can be swapped/upgraded without touching call sites.
For full API reference see README.md.
When to Use
Vendor this package when the user needs:
- Semantic caching of LLM / agent responses (return a cached answer for a semantically similar prompt)
- A vector-search read (
search) that returns the best match above a similarity threshold, or null on a miss - Append-only writes (
set) with optional attribute filters and TTL - Attribute-scoped invalidation (
deleteByAttributes), single-entry delete (deleteById), or fullflush - A
health()probe for the cache service
Vendoring
Sparse checkout + copy. The --branch flag accepts a git tag (preferred) or main.
CAU_REF="<git-tag-or-main>"
TMPDIR=$(mktemp -d)
git clone --depth 1 --branch "$CAU_REF" --filter=blob:none --sparse \
git@github.com:PrasanKumar93/custom-agent-utils.git "$TMPDIR"
cd "$TMPDIR" && git sparse-checkout set packages/cau-langcache
cp -r "$TMPDIR/packages/cau-langcache" <your-project>/packages/cau-langcache
rm -rf "$TMPDIR"
After vendoring
cd packages/cau-langcache
npm install
npm run build
Provenance file
After vendoring, create packages/cau-langcache/.vendor.json:
{
"source": "git@github.com:PrasanKumar93/custom-agent-utils.git",
"package": "packages/cau-langcache",
"tag": "<git-tag-or-main>",
"vendoredAt": "<ISO-8601 date>",
"forked": false
}
Updating
Re-run the sparse checkout commands above with the new CAU_REF, then:
cd packages/cau-langcache && npm install && npm run build
Update .vendor.json with the new tag and vendoredAt.
Quick usage (vendored path)
import { LangCache } from "cau-langcache";
LangCache.create({
serverURL: process.env.LANGCACHE_SERVER_URL!,
cacheId: process.env.LANGCACHE_CACHE_ID,
apiKey: process.env.LANGCACHE_API_KEY,
});
const cache = LangCache.getInstance();
const hit = await cache.search({
prompt: "What did James say about bonds in the Feb 26 2026 meeting?",
similarityThreshold: 0.9,
attributes: { feature: "chatbot", userId: "sarah-chen", namespace: "wealth-advisor" },
});
if (!hit) {
await cache.set({
prompt: "What did James say about bonds in the Feb 26 2026 meeting?",
response: "<agent answer>",
attributes: { feature: "chatbot", userId: "sarah-chen", namespace: "wealth-advisor" },
ttlMillis: 600_000,
});
}
See README.md for the full API table, config reference, attribute-schema notes, and testing setup.
Rules
- Do NOT modify vendored code. Extend via adapters or wrappers.
- If you must modify, update
.vendor.jsonto mark"forked": true. - Connection strings / secrets must come from environment variables.
- The provisioned cache may enforce an attribute schema (an allow-list of attribute keys). Sending an attribute outside that schema returns a
400. Keep attributes to the keys the cache was provisioned with. similarityis higher = closer (normalized cosine). Do not reuse distance-based (lower = closer) logic from older SDKs.