diff --git a/content/develop/ai/_index.md b/content/develop/ai/_index.md
index 98cd9b06de..17021e2bbf 100644
--- a/content/develop/ai/_index.md
+++ b/content/develop/ai/_index.md
@@ -149,7 +149,6 @@ Need a deeper-dive through different use cases and topics?
* [Agentic RAG](https://github.com/redis-developer/agentic-rag) - A tutorial focused on agentic RAG with LlamaIndex and Amazon Bedrock
* [Redis Notebooks for LangGraph](https://github.com/redis-developer/langgraph-redis/tree/main/examples) - Working with LangGraph agents and Redis memory
* [Build a LangGraph travel agent with Redis Agent Memory](https://redis.io/tutorials/redis-agent-memory-with-langgraph/) - Build a LangGraph agent with short-term session memory and long-term persistent memory using Redis Agent Memory
-* [Build a real-time AI agent with Redis Iris](https://redis.io/tutorials/redis-iris-call-agent/) - Combine Redis Agent Memory and Context Retriever to build a wealth advisor agent with persistent memory and structured data access
* [Build a car dealership agent with Google ADK and Redis Agent Memory](https://redis.io/tutorials/build-a-car-dealership-agent-with-google-adk-and-redis-agent-memory/) - Build a persistent AI agent using Google ADK and Redis Agent Memory Server with working and long-term memory
* [Build Google ADK agents with persistent, real-time memory on Redis](https://redis.io/en/blog/build-google-adk-agents-with-persistent-real-time-memory-on-redis/) - Use the `adk-redis` package to integrate Google ADK with Redis for persistent memory, sessions, and semantic caching in production agents
diff --git a/content/develop/ai/agent-builder/agent-concepts.md b/content/develop/ai/agent-builder/agent-concepts.md
index 80ba56dc53..d44b50f92d 100644
--- a/content/develop/ai/agent-builder/agent-concepts.md
+++ b/content/develop/ai/agent-builder/agent-concepts.md
@@ -93,7 +93,7 @@ You can build each part of an agent's context layer yourself from Redis data str
| Query business data safely | Hand-written tools or generated queries per agent | [Context Gateway](/content/develop/ai/context-engine/context-gateway/_index.md) generates tools from a data model you define once. Agents call them over MCP (Model Context Protocol), and agent keys limit what each agent can reach. |
| Keep that data current | Your own sync jobs from the source database | [Data Integration](/content/develop/ai/context-engine/data-integration/_index.md) streams changes from relational databases into Redis within seconds. |
-LangCache and Agent Memory are currently in preview. To see where each service fits in a single request, see [how a request flows through Redis Iris](/content/develop/ai/context-engine/concepts/request-flow.md).
+LangCache is currently in preview. To see where each service fits in a single request, see [how a request flows through Redis Iris](/content/develop/ai/context-engine/concepts/request-flow.md).
## Types of agents you can build
diff --git a/content/develop/ai/context-engine/_index.md b/content/develop/ai/context-engine/_index.md
index 562ebd0028..658e317709 100644
--- a/content/develop/ai/context-engine/_index.md
+++ b/content/develop/ai/context-engine/_index.md
@@ -9,7 +9,6 @@ hideListLinks: true
linktitle: Redis Iris context engine
title: Redis Iris context engine
weight: 30
-bannerText: Agent Memory and Context Retriever are currently available in preview. Features and behavior are subject to change.
---
Give your AI agents the context layer they need to reliably act on business data.
@@ -20,8 +19,9 @@ Redis Iris eliminates the infrastructure burden of building context-aware AI age
{{< tile-card icon="images/dev/icons/icon-redis-iris-64-duotone.png" title="Concepts" description="What happens when an agent asks Redis Iris for context" url="/develop/ai/context-engine/concepts" >}}
{{< tile-card icon="images/dev/icons/icon-redis-agent-memory-64-duotone.png" title="Agent Memory" description="Persistent short-term and long-term memory across agent interactions" url="/develop/ai/context-engine/agent-memory" >}}
{{< tile-card icon="images/dev/icons/icon-redis-iris-64-duotone.png" title="Context Gateway" description="One MCP endpoint for the tools of any MCP server and your Redis data" url="/develop/ai/context-engine/context-gateway" >}}
- {{< tile-card icon="images/dev/icons/icon-redis-iris-64-duotone.png" title="Agent Playbooks" description="Publish reusable answers and procedures for agents" url="/develop/ai/context-engine/agent-playbook" >}}
+ {{< tile-card icon="images/dev/icons/icon-redis-iris-64-duotone.png" title="Agent Playbooks" description="Publish reusable answers and procedures for agents" url="/develop/ai/context-engine/agent-playbooks" >}}
{{< tile-card icon="images/dev/icons/icon-redis-iris-64-duotone.png" title="Lens" description="Debug agent answers by tracing the context behind each turn" url="/develop/ai/context-engine/lens" >}}
+ {{< tile-card icon="images/dev/icons/icon-redis-iris-64-duotone.png" title="SDK and CLI setup" description="Install redis-iris and connect it to Redis Cloud or a self-managed deployment" url="/develop/ai/context-engine/sdk-and-cli" >}}
{{< tile-card icon="images/dev/icons/icon-redis-code-64-duotone.png" title="Agent Mesh (preview)" description="Share agent-to-agent task state across Python replicas and resume event delivery" url="/develop/ai/context-engine/agent-mesh" >}}
diff --git a/content/develop/ai/context-engine/agent-playbook/_index.md b/content/develop/ai/context-engine/agent-playbooks/_index.md
similarity index 80%
rename from content/develop/ai/context-engine/agent-playbook/_index.md
rename to content/develop/ai/context-engine/agent-playbooks/_index.md
index da4d37a9d9..200b9e1699 100644
--- a/content/develop/ai/context-engine/agent-playbook/_index.md
+++ b/content/develop/ai/context-engine/agent-playbooks/_index.md
@@ -22,9 +22,9 @@ Publish an entry version, retrieve it for a task, and prepare revisions while ag
A FAQ gives an agent a validated answer, such as where a customer can find their refund status. A skill ([Agent Skill](https://agentskills.io/home)) guides the agent through drafting a reply from that status using a template.
- {{< tile-card icon="images/icon_logo/icon-data-structures-64-midnight.png" title="Concepts" description="Learn how playbooks, entries, versions, publication, and proposals work" url="/develop/ai/context-engine/agent-playbook/concepts" >}}
- {{< tile-card icon="images/dev/icons/icon-redis-code-64-duotone.png" title="Quickstart" description="Publish and retrieve your first FAQ" url="/develop/ai/context-engine/agent-playbook/quickstart" >}}
- {{< tile-card icon="images/dev/icons/icon-redis-code-64-duotone.png" title="Agent integration" description="Connect Redis Agent Playbooks to OpenAI Agents SDK or LangGraph" url="/develop/ai/context-engine/agent-playbook/agent-integration" >}}
+ {{< tile-card icon="images/icon_logo/icon-data-structures-64-midnight.png" title="Concepts" description="Learn how playbooks, entries, versions, publication, and proposals work" url="/develop/ai/context-engine/agent-playbooks/concepts" >}}
+ {{< tile-card icon="images/dev/icons/icon-redis-code-64-duotone.png" title="Quickstart" description="Publish and retrieve your first FAQ" url="/develop/ai/context-engine/agent-playbooks/quickstart" >}}
+ {{< tile-card icon="images/dev/icons/icon-redis-code-64-duotone.png" title="Agent integration" description="Connect Redis Agent Playbooks to OpenAI Agents SDK or LangGraph" url="/develop/ai/context-engine/agent-playbooks/agent-integration" >}}
## Why use Redis Agent Playbooks?
@@ -45,23 +45,23 @@ A FAQ gives an agent a validated answer, such as where a customer can find their
A publisher selects the version of each **entry** agents receive. Your application controls how retrieved content enters the model's context and which actions the agent can take.
-See [Redis Agent Playbooks concepts]({{< relref "/develop/ai/context-engine/agent-playbook/concepts" >}}) for versions, publication, and review.
+See [Redis Agent Playbooks concepts]({{< relref "/develop/ai/context-engine/agent-playbooks/concepts" >}}) for versions, publication, and review.
## Get started
1. Set up a playbook. Operator guides are coming soon.
-2. [Publish and retrieve your first FAQ]({{< relref "/develop/ai/context-engine/agent-playbook/quickstart" >}}).
+2. [Publish and retrieve your first FAQ]({{< relref "/develop/ai/context-engine/agent-playbooks/quickstart" >}}).
## Manage playbook entries
-- [Manage FAQs]({{< relref "/develop/ai/context-engine/agent-playbook/manage-faqs" >}}): write, publish, and update FAQs.
-- [Manage skills]({{< relref "/develop/ai/context-engine/agent-playbook/manage-skills" >}}): package Agent Skills and load their instructions and files on demand.
-- [Review proposals]({{< relref "/develop/ai/context-engine/agent-playbook/proposals" >}}): check proposed entries and accumulated evidence before accepting them.
+- [Manage FAQs]({{< relref "/develop/ai/context-engine/agent-playbooks/manage-faqs" >}}): write, publish, and update FAQs.
+- [Manage skills]({{< relref "/develop/ai/context-engine/agent-playbooks/manage-skills" >}}): package Agent Skills and load their instructions and files on demand.
+- [Review proposals]({{< relref "/develop/ai/context-engine/agent-playbooks/proposals" >}}): check proposed entries and accumulated evidence before accepting them.
## Serve playbook entries at runtime
-- [Retrieve relevant FAQs or Agent Skills]({{< relref "/develop/ai/context-engine/agent-playbook/retrieval" >}}) on demand.
-- [Integrate with an agent]({{< relref "/develop/ai/context-engine/agent-playbook/agent-integration" >}}) using OpenAI Agents SDK or LangGraph.
-- [Connect with MCP]({{< relref "/develop/ai/context-engine/agent-playbook/mcp" >}}).
+- [Retrieve relevant FAQs or Agent Skills]({{< relref "/develop/ai/context-engine/agent-playbooks/retrieval" >}}) on demand.
+- [Integrate with an agent]({{< relref "/develop/ai/context-engine/agent-playbooks/agent-integration" >}}) using OpenAI Agents SDK or LangGraph.
+- [Connect with MCP]({{< relref "/develop/ai/context-engine/agent-playbooks/mcp" >}}).
-Use the [API reference]({{< relref "/develop/ai/context-engine/agent-playbook/api-reference" >}}) for operations and schemas, and [service limits and errors]({{< relref "/develop/ai/context-engine/agent-playbook/limits" >}}) for constraints and recovery guidance.
+Use the [API reference]({{< relref "/develop/ai/context-engine/agent-playbooks/api-reference" >}}) for operations and schemas, and [service limits and errors]({{< relref "/develop/ai/context-engine/agent-playbooks/limits" >}}) for constraints and recovery guidance.
diff --git a/content/develop/ai/context-engine/agent-playbook/agent-integration.md b/content/develop/ai/context-engine/agent-playbooks/agent-integration.md
similarity index 86%
rename from content/develop/ai/context-engine/agent-playbook/agent-integration.md
rename to content/develop/ai/context-engine/agent-playbooks/agent-integration.md
index af00a45c88..06b2424ad5 100644
--- a/content/develop/ai/context-engine/agent-playbook/agent-integration.md
+++ b/content/develop/ai/context-engine/agent-playbooks/agent-integration.md
@@ -19,16 +19,16 @@ Both framework examples use the same task:
The request names no skill. The agent selects one from its name and description in the retrieved previews.
-
+
{width="700"}
Initial SDK discovery replaces routine MCP discovery at the start of the turn. MCP discovery remains available for follow-up questions and publication changes. Progressive disclosure concerns skill instructions and files; the available tool definitions remain the same.
## Before you begin
-Follow the [quickstart setup]({{< relref "/develop/ai/context-engine/agent-playbook/quickstart#before-you-begin" >}}) to install the Redis Agent Playbooks SDK. Export `PLAYBOOK_URL`, `PLAYBOOK_ID`, and `PLAYBOOK_API_KEY` using a key with `read` permission. Publish the sample [refund skill]({{< relref "/develop/ai/context-engine/agent-playbook/manage-skills" >}}) and keep it published while testing. Publish the [quickstart FAQ]({{< relref "/develop/ai/context-engine/agent-playbook/quickstart" >}}) to test answer lookup too.
+Follow the [quickstart setup]({{< relref "/develop/ai/context-engine/agent-playbooks/quickstart#before-you-begin" >}}) to install the Redis Agent Playbooks SDK. Export `PLAYBOOK_URL`, `PLAYBOOK_ID`, and `PLAYBOOK_API_KEY` using a key with `read` permission. Publish the sample [refund skill]({{< relref "/develop/ai/context-engine/agent-playbooks/manage-skills" >}}) and keep it published while testing. Publish the [quickstart FAQ]({{< relref "/develop/ai/context-engine/agent-playbooks/quickstart" >}}) to test answer lookup too.
-These programs connect to a playbook from your application runtime, which must reach the SDK and [MCP endpoints]({{< relref "/develop/ai/context-engine/agent-playbook/mcp#configure-the-connection" >}}). They use `gpt-5-mini` for model calls. Export a provider key separately:
+These programs connect to a playbook from your application runtime, which must reach the SDK and [MCP endpoints]({{< relref "/develop/ai/context-engine/agent-playbooks/mcp#configure-the-connection" >}}). They use `gpt-5-mini` for model calls. Export a provider key separately:
```bash
export OPENAI_API_KEY=''
@@ -100,4 +100,4 @@ Reset `AGENT_TASK` with `unset AGENT_TASK` to return to the default refund task.
Inspect initial discovery separately from the agent's tool results. Confirm that the first model input includes the returned context and preserves each identifier/version pair. Skill previews contain names, descriptions, and URIs; instructions and supporting files arrive through loading.
-If the agent repeatedly discovers at the start or invents a URI, inspect its instructions and supplied context. The examples ask it to recover once after a publication change; enforce stricter retry or tool policies in your application when needed. See [MCP troubleshooting]({{< relref "/develop/ai/context-engine/agent-playbook/mcp#troubleshoot-the-connection" >}}) and [retrieval controls]({{< relref "/develop/ai/context-engine/agent-playbook/retrieval" >}}).
+If the agent repeatedly discovers at the start or invents a URI, inspect its instructions and supplied context. The examples ask it to recover once after a publication change; enforce stricter retry or tool policies in your application when needed. See [MCP troubleshooting]({{< relref "/develop/ai/context-engine/agent-playbooks/mcp#troubleshoot-the-connection" >}}) and [retrieval controls]({{< relref "/develop/ai/context-engine/agent-playbooks/retrieval" >}}).
diff --git a/content/develop/ai/context-engine/agent-playbook/api-reference.md b/content/develop/ai/context-engine/agent-playbooks/api-reference.md
similarity index 56%
rename from content/develop/ai/context-engine/agent-playbook/api-reference.md
rename to content/develop/ai/context-engine/agent-playbooks/api-reference.md
index 43188411b9..a9aab21f01 100644
--- a/content/develop/ai/context-engine/agent-playbook/api-reference.md
+++ b/content/develop/ai/context-engine/agent-playbooks/api-reference.md
@@ -13,6 +13,6 @@ params:
Use the Redis Agent Playbooks data-plane API to author, publish, and retrieve FAQs and skills, and review proposals. FAQs and skills have separate authoring operations.
-[Download the OpenAPI contract]({{< relref "/develop/ai/context-engine/agent-playbook/api-reference/" >}}openapi.json) to generate clients or inspect schemas.
+[Download the OpenAPI contract]({{< relref "/develop/ai/context-engine/agent-playbooks/api-reference/" >}}openapi.json) to generate clients or inspect schemas.
-See [Redis Agent Playbooks concepts]({{< relref "/develop/ai/context-engine/agent-playbook/concepts" >}}) for entries, versions, and permissions, [Retrieve knowledge]({{< relref "/develop/ai/context-engine/agent-playbook/retrieval" >}}) for search and discovery, and [service limits and errors]({{< relref "/develop/ai/context-engine/agent-playbook/limits" >}}) for constraints and recovery.
+See [Redis Agent Playbooks concepts]({{< relref "/develop/ai/context-engine/agent-playbooks/concepts" >}}) for entries, versions, and permissions, [Retrieve knowledge]({{< relref "/develop/ai/context-engine/agent-playbooks/retrieval" >}}) for search and discovery, and [service limits and errors]({{< relref "/develop/ai/context-engine/agent-playbooks/limits" >}}) for constraints and recovery.
diff --git a/content/develop/ai/context-engine/agent-playbook/api-reference/openapi.json b/content/develop/ai/context-engine/agent-playbooks/api-reference/openapi.json
similarity index 100%
rename from content/develop/ai/context-engine/agent-playbook/api-reference/openapi.json
rename to content/develop/ai/context-engine/agent-playbooks/api-reference/openapi.json
diff --git a/content/develop/ai/context-engine/agent-playbook/concepts.md b/content/develop/ai/context-engine/agent-playbooks/concepts.md
similarity index 92%
rename from content/develop/ai/context-engine/agent-playbook/concepts.md
rename to content/develop/ai/context-engine/agent-playbooks/concepts.md
index d30a6f9bc9..22cd309f90 100644
--- a/content/develop/ai/context-engine/agent-playbook/concepts.md
+++ b/content/develop/ai/context-engine/agent-playbooks/concepts.md
@@ -47,7 +47,7 @@ Both types can include optional intents, attributes, and metadata:
- **Attributes** support exact-match retrieval filters, such as locale or audience.
- **Metadata** holds additional agent or application context; retrieval filters do not search it.
-For fields and types, see the [entry model]({{< relref "/develop/ai/context-engine/agent-playbook/api-reference#schema/StableEntry" >}}).
+For fields and types, see the [entry model]({{< relref "/develop/ai/context-engine/agent-playbooks/api-reference#schema/StableEntry" >}}).
### Versions
@@ -55,10 +55,10 @@ A version is a complete, immutable snapshot of an entry's authored content. Upda
The latest version and the published version can differ. Version 2 of a refund procedure can remain under review while agents retrieve version 1. Publishing version 2 switches retrieval to the update and retains version 1 for rollback.
-
+
{width="700"}
-Management operations let you inspect drafts and historical versions with the required permissions. See the [version model]({{< relref "/develop/ai/context-engine/agent-playbook/api-reference#schema/Version" >}}) for fields and types.
+Management operations let you inspect drafts and historical versions with the required permissions. See the [version model]({{< relref "/develop/ai/context-engine/agent-playbooks/api-reference#schema/Version" >}}) for fields and types.
### Publication
@@ -76,7 +76,7 @@ For skills, the agent selects a preview, loads its instructions, and fetches sup
## Proposals
-A proposal is a suggested playbook entry awaiting expert review. See the [proposal model]({{< relref "/develop/ai/context-engine/agent-playbook/api-reference#schema/GetProposalResponseContent" >}}) for fields and types.
+A proposal is a suggested playbook entry awaiting expert review. See the [proposal model]({{< relref "/develop/ai/context-engine/agent-playbooks/api-reference#schema/GetProposalResponseContent" >}}) for fields and types.
A human or agent can suggest a question and answer, edit the candidate, or attach evidence.
@@ -84,11 +84,11 @@ Accepting a reviewed proposal *promotes* its candidate into an *unpublished* ent
### Evidence
-Evidence gives reviewers source context for a proposal. It can come from background extraction or an authorized client acting for a human or agent. See the [evidence model]({{< relref "/develop/ai/context-engine/agent-playbook/api-reference#schema/ProposalEvidence" >}}) for fields and types.
+Evidence gives reviewers source context for a proposal. It can come from background extraction or an authorized client acting for a human or agent. See the [evidence model]({{< relref "/develop/ai/context-engine/agent-playbooks/api-reference#schema/ProposalEvidence" >}}) for fields and types.
More evidence means more submitted observations, not greater factual accuracy. Check the candidate against its sources before accepting and publishing it.
-See [Review proposals]({{< relref "/develop/ai/context-engine/agent-playbook/proposals" >}}) for the procedure.
+See [Review proposals]({{< relref "/develop/ai/context-engine/agent-playbooks/proposals" >}}) for the procedure.
## Extraction
@@ -98,4 +98,4 @@ An administrator connects a Redis Agent Memory store to a playbook through an **
You can also build your own producer that calls the proposal and evidence APIs directly. Your application chooses the source material, generates candidates, and decides whether to create a proposal or add evidence. Both approaches use the same inbox and review process: acceptance creates an unpublished FAQ, and publication makes the reviewed version available to agents.
-Extraction and proposal generation currently support FAQs. Skill extraction is planned for a future release. See [Automate proposal generation](/content/develop/ai/context-engine/agent-playbook/proposals.md#automate-proposal-generation) for both approaches and their review requirements.
+Extraction and proposal generation currently support FAQs. Skill extraction is planned for a future release. See [Automate proposal generation](/content/develop/ai/context-engine/agent-playbooks/proposals.md#automate-proposal-generation) for both approaches and their review requirements.
diff --git a/content/develop/ai/context-engine/agent-playbook/limits.md b/content/develop/ai/context-engine/agent-playbooks/limits.md
similarity index 93%
rename from content/develop/ai/context-engine/agent-playbook/limits.md
rename to content/develop/ai/context-engine/agent-playbooks/limits.md
index ffaa515e82..a0557d25e4 100644
--- a/content/develop/ai/context-engine/agent-playbook/limits.md
+++ b/content/develop/ai/context-engine/agent-playbooks/limits.md
@@ -13,7 +13,7 @@ weight: 90
Check these limits when preparing content or handling request failures. Confirm deployment overrides with your administrator.
-The [API reference]({{< relref "/develop/ai/context-engine/agent-playbook/api-reference" >}}) defines field formats and operation-specific schemas.
+The [API reference]({{< relref "/develop/ai/context-engine/agent-playbooks/api-reference" >}}) defines field formats and operation-specific schemas.
## Content limits
@@ -60,11 +60,11 @@ These field and structure limits also apply:
| Management list page | 1–200 results; default `50` |
| Entry lookup or bulk deletion | 1–100 entry references or identifiers |
-Pins consume discovery slots and preview budget. The preview ceiling applies to discovery rather than type-specific search, loaded instructions, or fetched files. See [Retrieve knowledge]({{< relref "/develop/ai/context-engine/agent-playbook/retrieval" >}}) for the behavior of each setting.
+Pins consume discovery slots and preview budget. The preview ceiling applies to discovery rather than type-specific search, loaded instructions, or fetched files. See [Retrieve knowledge]({{< relref "/develop/ai/context-engine/agent-playbooks/retrieval" >}}) for the behavior of each setting.
Follow a list response's next cursor until it is absent, even if a page is empty. Keep the collection, filters, and ordering consistent between pages. Lists reflect concurrent changes and do not represent a fixed snapshot.
-Entry and proposal lists can include a separately measured first-page `total`. Absence means unknown, not zero. Cursored pages and version history omit totals. Use the cursor, not the count or page length, to decide when to stop. See [List entries and inspect history]({{< relref "/develop/ai/context-engine/agent-playbook/manage-faqs#list-entries-and-inspect-history" >}}) for examples.
+Entry and proposal lists can include a separately measured first-page `total`. Absence means unknown, not zero. Cursored pages and version history omit totals. Use the cursor, not the count or page length, to decide when to stop. See [List entries and inspect history]({{< relref "/develop/ai/context-engine/agent-playbooks/manage-faqs#list-entries-and-inspect-history" >}}) for examples.
## Proposal and evidence limits
@@ -83,7 +83,7 @@ Proposal retention does not affect an accepted FAQ's history. Store required rev
## Handle request errors
-HTTP errors include a status and machine-readable `type`. Use the type to choose a recovery action. For MCP, inspect `isError` before reading tool content. See [MCP troubleshooting]({{< relref "/develop/ai/context-engine/agent-playbook/mcp#troubleshoot-the-connection" >}}).
+HTTP errors include a status and machine-readable `type`. Use the type to choose a recovery action. For MCP, inspect `isError` before reading tool content. See [MCP troubleshooting]({{< relref "/develop/ai/context-engine/agent-playbooks/mcp#troubleshoot-the-connection" >}}).
| Status | Meaning | Action |
|:-------|:--------|:-------|
@@ -99,7 +99,7 @@ HTTP errors include a status and machine-readable `type`. Use the type to choose
| `500` | An internal or content-integrity failure occurred. | Preserve safe diagnostic details and report persistent failures. Stored integrity failures require administrator investigation. |
| `503` | The service or playbook is unavailable. | Check readiness and use bounded retries for safe operations. |
-For example, inspect a failed entry read without retrying it automatically. Use the [client setup]({{< relref "/develop/ai/context-engine/agent-playbook/quickstart#connect-to-the-playbook" >}}) and export the FAQ identifier you want to inspect:
+For example, inspect a failed entry read without retrying it automatically. Use the [client setup]({{< relref "/develop/ai/context-engine/agent-playbooks/quickstart#connect-to-the-playbook" >}}) and export the FAQ identifier you want to inspect:
```bash
export PLAYBOOK_FAQ_ID=''
@@ -144,4 +144,4 @@ Use a key with `write` permission for bulk deletion. Choose the entry type befor
Bulk deletion accepts 1–100 entry identifiers of the selected type. The data plane does not provide an operation to clear an entire playbook. An administrator can clear entries, proposals, or both through the control plane.
-For ordinary sample cleanup, use the single-entry deletion steps in [Manage FAQs]({{< relref "/develop/ai/context-engine/agent-playbook/manage-faqs#withdraw-or-delete-an-faq" >}}) or [Manage skills]({{< relref "/develop/ai/context-engine/agent-playbook/manage-skills#withdraw-or-delete-a-skill" >}}).
+For ordinary sample cleanup, use the single-entry deletion steps in [Manage FAQs]({{< relref "/develop/ai/context-engine/agent-playbooks/manage-faqs#withdraw-or-delete-an-faq" >}}) or [Manage skills]({{< relref "/develop/ai/context-engine/agent-playbooks/manage-skills#withdraw-or-delete-a-skill" >}}).
diff --git a/content/develop/ai/context-engine/agent-playbook/manage-faqs.md b/content/develop/ai/context-engine/agent-playbooks/manage-faqs.md
similarity index 93%
rename from content/develop/ai/context-engine/agent-playbook/manage-faqs.md
rename to content/develop/ai/context-engine/agent-playbooks/manage-faqs.md
index 3eb1d7a112..85a9bb3867 100644
--- a/content/develop/ai/context-engine/agent-playbook/manage-faqs.md
+++ b/content/develop/ai/context-engine/agent-playbooks/manage-faqs.md
@@ -15,9 +15,9 @@ Publish a FAQ to give agents an approved answer to a recurring question. Write i
## Before you begin
-Use an existing playbook and an API key with `write` permission to create and maintain entries. Publishing and withdrawing require `publish`. See [access permissions]({{< relref "/develop/ai/context-engine/agent-playbook/concepts#playbooks" >}}).
+Use an existing playbook and an API key with `write` permission to create and maintain entries. Publishing and withdrawing require `publish`. See [access permissions]({{< relref "/develop/ai/context-engine/agent-playbooks/concepts#playbooks" >}}).
-Start with the quickstart's [client setup]({{< relref "/develop/ai/context-engine/agent-playbook/quickstart#connect-to-the-playbook" >}}), then append this page's snippets in order. Run each write once.
+Start with the quickstart's [client setup]({{< relref "/develop/ai/context-engine/agent-playbooks/quickstart#connect-to-the-playbook" >}}), then append this page's snippets in order. Run each write once.
The CLI uses flat FAQ JSON files and `faqs push` to reconcile content by entry key. A changed file appends a version; an unchanged file does not. Publication remains a separate command.
@@ -25,7 +25,7 @@ The CLI uses flat FAQ JSON files and `faqs push` to reconcile content by entry k
Write a question in the language a user would use. Include conditions that distinguish it from similar questions, such as the product or region. Make the answer self-contained: the agent receives it without the source conversation or document.
-The sample FAQ explains where to find refund status. Use a [skill]({{< relref "/develop/ai/context-engine/agent-playbook/manage-skills" >}}) when the agent must interpret the customer's reported stage, choose a template, and draft a reply.
+The sample FAQ explains where to find refund status. Use a [skill]({{< relref "/develop/ai/context-engine/agent-playbooks/manage-skills" >}}) when the agent must interpret the customer's reported stage, choose a template, and draft a reply.
Use these fields to describe the answer and its audience:
@@ -51,7 +51,7 @@ The new FAQ is unpublished. Review it before publishing; search and discovery do
## Promote a reviewed proposal
-If an answer comes from the proposal inbox, [review the candidate and its evidence]({{< relref "/develop/ai/context-engine/agent-playbook/proposals#review-and-edit-a-candidate" >}}) first. Accept the proposal with the revision you reviewed.
+If an answer comes from the proposal inbox, [review the candidate and its evidence]({{< relref "/develop/ai/context-engine/agent-playbooks/proposals#review-and-edit-a-candidate" >}}) first. Accept the proposal with the revision you reviewed.
Acceptance returns an entry and version for one unpublished FAQ. Save those values and continue with publication. Promotion does not make the answer available to agents, and it does not update an existing FAQ.
@@ -62,7 +62,7 @@ Acceptance returns an entry and version for one unpublished FAQ. Save those valu
3. Publish that version with `publish_faq`.
4. Test retrieval with a reader key and a representative question.
-Test a paraphrase such as “Where can I see my refund?” and a nearby question the answer does not cover, such as “How do I request a refund?” Check the returned entry and audience, then use the [retrieval guide]({{< relref "/develop/ai/context-engine/agent-playbook/retrieval" >}}) to tune matching.
+Test a paraphrase such as “Where can I see my refund?” and a nearby question the answer does not cover, such as “How do I request a refund?” Check the returned entry and audience, then use the [retrieval guide]({{< relref "/develop/ai/context-engine/agent-playbooks/retrieval" >}}) to tune matching.
{{< clients-example set="iris_playbook_faqs" step="playbook-faq-publish" description="" lang_filter="Python (Iris),cURL (Iris),CLI (Iris)" footer="hide" />}}
diff --git a/content/develop/ai/context-engine/agent-playbook/manage-skills.md b/content/develop/ai/context-engine/agent-playbooks/manage-skills.md
similarity index 89%
rename from content/develop/ai/context-engine/agent-playbook/manage-skills.md
rename to content/develop/ai/context-engine/agent-playbooks/manage-skills.md
index 47302b12d8..667bf12a27 100644
--- a/content/develop/ai/context-engine/agent-playbook/manage-skills.md
+++ b/content/develop/ai/context-engine/agent-playbooks/manage-skills.md
@@ -17,7 +17,7 @@ A skill tells an agent how to complete a task: what inputs or tools to use, whic
Use an existing playbook and an API key with `write` permission to upload and maintain skills. Publishing and withdrawing require `publish`.
-Follow the quickstart to [install a client and configure it]({{< relref "/develop/ai/context-engine/agent-playbook/quickstart#before-you-begin" >}}). You also need Bash and the `zip` utility for the sample package.
+Follow the quickstart to [install a client and configure it]({{< relref "/develop/ai/context-engine/agent-playbooks/quickstart#before-you-begin" >}}). You also need Bash and the `zip` utility for the sample package.
Expand an example to copy the complete program. Run the package-preparation step before using a Python or CLI copy.
@@ -36,7 +36,7 @@ To prepare an upload:
3. Create a ZIP archive containing exactly one skill directory.
4. Encode the archive as base64 for the upload request.
-Redis Agent Playbooks also enforces [package and content limits]({{< relref "/develop/ai/context-engine/agent-playbook/limits#content-limits" >}}).
+Redis Agent Playbooks also enforces [package and content limits]({{< relref "/develop/ai/context-engine/agent-playbooks/limits#content-limits" >}}).
Run these commands in a new directory. The sample uses customer-provided information without accessing an order system. Adapt its guidance to your policy.
@@ -66,11 +66,11 @@ The CLI uses the skill name as its stable entry key. `skills push` creates missi
4. Publish the reviewed version with `publish_skill`.
5. Test retrieval with a reader key, then test the agent's use of the skill.
-Uploading a valid package does not publish it automatically. The current [proposal workflow]({{< relref "/develop/ai/context-engine/agent-playbook/proposals" >}}) creates FAQs, not skills.
+Uploading a valid package does not publish it automatically. The current [proposal workflow]({{< relref "/develop/ai/context-engine/agent-playbooks/proposals" >}}) creates FAQs, not skills.
{{< clients-example set="iris_playbook_skills" step="playbook-skill-review" description="" lang_filter="Python (Iris),cURL (Iris),CLI (Iris)" footer="hide" />}}
-Publish after review. The [agent-integration examples]({{< relref "/develop/ai/context-engine/agent-playbook/agent-integration" >}}) ask an agent to draft a reply for the stage “Processing.” Check that it loads this skill and template, preserves the stage, and leaves no placeholders or invented payment date. Also test a missing refund and missing input.
+Publish after review. The [agent-integration examples]({{< relref "/develop/ai/context-engine/agent-playbooks/agent-integration" >}}) ask an agent to draft a reply for the stage “Processing.” Check that it loads this skill and template, preserves the stage, and leaves no placeholders or invented payment date. Also test a missing refund and missing input.
{{< clients-example set="iris_playbook_skills" step="playbook-skill-publish" description="" lang_filter="Python (Iris),cURL (Iris),CLI (Iris)" footer="hide" />}}
@@ -92,7 +92,7 @@ Leave the update unpublished here so the loading example uses the first version.
Search and discovery return previews: a name, description, entry identifier, version, and file address. Select a relevant skill before loading its instructions. Fetch supporting files when the instructions or task call for them.
-Keep the returned identifier and version together, and use the returned resource addresses. If the skill is republished or withdrawn between discovery and loading, rediscover and reassess it. See [Retrieve knowledge]({{< relref "/develop/ai/context-engine/agent-playbook/retrieval" >}}) and [Connect with MCP]({{< relref "/develop/ai/context-engine/agent-playbook/mcp" >}}).
+Keep the returned identifier and version together, and use the returned resource addresses. If the skill is republished or withdrawn between discovery and loading, rediscover and reassess it. See [Retrieve knowledge]({{< relref "/develop/ai/context-engine/agent-playbooks/retrieval" >}}) and [Connect with MCP]({{< relref "/develop/ai/context-engine/agent-playbooks/mcp" >}}).
Resource descriptors identify the file's media type, size, and digest. Decode known text files as UTF-8 (Unicode Transformation Format, 8-bit); keep binary files as bytes. Python's unified helper reads the stream and exposes `data`, `mime_type`, and optional decoded `text`.
@@ -100,15 +100,15 @@ This example loads the first published version and reads its reply template.
{{< clients-example set="iris_playbook_skills" step="playbook-skill-load" description="" lang_filter="Python (Iris),cURL (Iris),CLI (Iris)" footer="hide" />}}
-This guide's CLI reads use the authoring key. The published CLI resolves the entry through management lookup, so these commands require `write` or `publish` even for a published version. For reader-only loading, use the [retrieval examples](/content/develop/ai/context-engine/agent-playbook/retrieval.md#load-skills-with-progressive-disclosure).
+This guide's CLI reads use the authoring key. The published CLI resolves the entry through management lookup, so these commands require `write` or `publish` even for a published version. For reader-only loading, use the [retrieval examples](/content/develop/ai/context-engine/agent-playbooks/retrieval.md#load-skills-with-progressive-disclosure).
-To verify file content, compare the descriptor's SHA-256 (Secure Hash Algorithm 256-bit) digest with the downloaded bytes. It uses `sha256:`; the HTTP `Content-Digest` header represents the same hash as `sha-256=::`. This differs from the normalized entry digest in [entry lookup]({{< relref "/develop/ai/context-engine/agent-playbook/manage-faqs#look-up-entry-state" >}}).
+To verify file content, compare the descriptor's SHA-256 (Secure Hash Algorithm 256-bit) digest with the downloaded bytes. It uses `sha256:`; the HTTP `Content-Digest` header represents the same hash as `sha-256=::`. This differs from the normalized entry digest in [entry lookup]({{< relref "/develop/ai/context-engine/agent-playbooks/manage-faqs#look-up-entry-state" >}}).
## List skills and inspect history
-Use `list_skills` to inventory entries and `get_skill` to inspect one entry's summary. These operations require `read`; draft content and full version history require `write` or `publish`. To resolve a skill by its entry key or compare latest and published content digests, use the shared [entry lookup operation]({{< relref "/develop/ai/context-engine/agent-playbook/manage-faqs#look-up-entry-state" >}}).
+Use `list_skills` to inventory entries and `get_skill` to inspect one entry's summary. These operations require `read`; draft content and full version history require `write` or `publish`. To resolve a skill by its entry key or compare latest and published content digests, use the shared [entry lookup operation]({{< relref "/develop/ai/context-engine/agent-playbooks/manage-faqs#look-up-entry-state" >}}).
-Follow cursors even after empty pages, and keep filters and ordering unchanged. An absent first-page `total` means the count is unknown. See [pagination behavior]({{< relref "/develop/ai/context-engine/agent-playbook/limits#retrieval-limits" >}}).
+Follow cursors even after empty pages, and keep filters and ordering unchanged. An absent first-page `total` means the count is unknown. See [pagination behavior]({{< relref "/develop/ai/context-engine/agent-playbooks/limits#retrieval-limits" >}}).
{{< clients-example set="iris_playbook_skills" step="playbook-skill-list" description="" lang_filter="Python (Iris),cURL (Iris),CLI (Iris)" footer="hide" />}}
diff --git a/content/develop/ai/context-engine/agent-playbook/mcp.md b/content/develop/ai/context-engine/agent-playbooks/mcp.md
similarity index 85%
rename from content/develop/ai/context-engine/agent-playbook/mcp.md
rename to content/develop/ai/context-engine/agent-playbooks/mcp.md
index 0bb425e58f..9f7a15f08f 100644
--- a/content/develop/ai/context-engine/agent-playbook/mcp.md
+++ b/content/develop/ai/context-engine/agent-playbooks/mcp.md
@@ -11,13 +11,13 @@ title: Connect with MCP
weight: 60
---
-Connect a Streamable HTTP MCP client to retrieve published FAQs and skill content. Redis Agent Playbooks exposes three tools and standard skill resources. For framework examples that retrieve context before a model turn, see [Integrate with an agent]({{< relref "/develop/ai/context-engine/agent-playbook/agent-integration" >}}).
+Connect a Streamable HTTP MCP client to retrieve published FAQs and skill content. Redis Agent Playbooks exposes three tools and standard skill resources. For framework examples that retrieve context before a model turn, see [Integrate with an agent]({{< relref "/develop/ai/context-engine/agent-playbooks/agent-integration" >}}).
## Before you begin
-Get the data-plane endpoint, playbook identifier, and an API key with `read` permission. Export `PLAYBOOK_URL`, `PLAYBOOK_ID`, and `PLAYBOOK_API_KEY` as shown in [Save connection values]({{< relref "/develop/ai/context-engine/agent-playbook/quickstart#save-connection-values" >}}).
+Get the data-plane endpoint, playbook identifier, and an API key with `read` permission. Export `PLAYBOOK_URL`, `PLAYBOOK_ID`, and `PLAYBOOK_API_KEY` as shown in [Save connection values]({{< relref "/develop/ai/context-engine/agent-playbooks/quickstart#save-connection-values" >}}).
-Publish the sample [FAQ]({{< relref "/develop/ai/context-engine/agent-playbook/quickstart" >}}) or [skill]({{< relref "/develop/ai/context-engine/agent-playbook/manage-skills" >}}) to test discovery. The basic clients use no model-provider key.
+Publish the sample [FAQ]({{< relref "/develop/ai/context-engine/agent-playbooks/quickstart" >}}) or [skill]({{< relref "/develop/ai/context-engine/agent-playbooks/manage-skills" >}}) to test discovery. The basic clients use no model-provider key.
For the Python client, use Python 3.10 or later and install these dependencies:
@@ -56,7 +56,7 @@ List the tools on an initialized connection to get their input schemas.
| `load_skill` | The selected skill's `entry_id` and `version`. | Full instructions and resource descriptors. |
| `fetch_resource` | A returned resource `uri`. | File content, media type, and digest. |
-
+
{width="700"}
Use the tools in this order:
@@ -65,17 +65,17 @@ Use the tools in this order:
2. Select a skill preview, then load its instructions with the returned identifier and version together.
3. Fetch supporting files when the instructions or task require them, using their returned URIs.
-See [Discovery]({{< relref "/develop/ai/context-engine/agent-playbook/retrieval#discovery" >}}) for selection controls. Progressive disclosure loads **skill content** on demand; these three tool definitions remain available on the connection.
+See [Discovery]({{< relref "/develop/ai/context-engine/agent-playbooks/retrieval#discovery" >}}) for selection controls. Progressive disclosure loads **skill content** on demand; these three tool definitions remain available on the connection.
## Connect a client
-This client connects, lists tools, and prints discovery results for a refund task. For an agent that selects a skill and loads its instructions and files, see [the framework examples]({{< relref "/develop/ai/context-engine/agent-playbook/agent-integration" >}}).
+This client connects, lists tools, and prints discovery results for a refund task. For an agent that selects a skill and loads its instructions and files, see [the framework examples]({{< relref "/develop/ai/context-engine/agent-playbooks/agent-integration" >}}).
Copy the complete program and save it as `mcp_client.py` or `mcp_client.sh`. Run `python mcp_client.py` or `bash mcp_client.sh` with the connection values you exported.
{{< clients-example set="iris_playbook_mcp_client" step="playbook-mcp-client" description="" lang_filter="Python (Iris),cURL (Iris)" footer="hide" />}}
-Expect the three tool names followed by the discovery response as JSON. It includes matching FAQ answers and skill previews. Empty `pinnedEntries` and `discoveredEntries` arrays can reflect the query, publication, filters, or [preview budget]({{< relref "/develop/ai/context-engine/agent-playbook/retrieval#limit-discovery-previews" >}}). A request or tool error stops the program with an error.
+Expect the three tool names followed by the discovery response as JSON. It includes matching FAQ answers and skill previews. Empty `pinnedEntries` and `discoveredEntries` arrays can reflect the query, publication, filters, or [preview budget]({{< relref "/develop/ai/context-engine/agent-playbooks/retrieval#limit-discovery-previews" >}}). A request or tool error stops the program with an error.
## Read skill files as MCP resources
@@ -96,4 +96,4 @@ File reads enforce the current publication even with a management key. If public
- If a tool reports `isError`, inspect its error before using the content. Connection and transport failures can raise separately.
- If loading fails after a publication change, rediscover once and reassess the returned previews. Preserve returned identifiers and URIs; do not construct replacements.
-Keep diagnostic details without logging keys or private content. See [service limits and errors]({{< relref "/develop/ai/context-engine/agent-playbook/limits" >}}) for recovery guidance.
+Keep diagnostic details without logging keys or private content. See [service limits and errors]({{< relref "/develop/ai/context-engine/agent-playbooks/limits" >}}) for recovery guidance.
diff --git a/content/develop/ai/context-engine/agent-playbook/proposals.md b/content/develop/ai/context-engine/agent-playbooks/proposals.md
similarity index 83%
rename from content/develop/ai/context-engine/agent-playbook/proposals.md
rename to content/develop/ai/context-engine/agent-playbooks/proposals.md
index eb746b5bd1..f435d05be6 100644
--- a/content/develop/ai/context-engine/agent-playbook/proposals.md
+++ b/content/develop/ai/context-engine/agent-playbooks/proposals.md
@@ -13,11 +13,11 @@ weight: 40
Use proposals to turn answers from agent conversations, documents, or application events into knowledge other agents can reuse. An agent or application suggests an answer; a reviewer checks its evidence before accepting and publishing it as a frequently asked question (FAQ).
-Proposals currently add new FAQs. They do not create skills or revise existing entries. To correct an existing answer, use [FAQ versioning](/content/develop/ai/context-engine/agent-playbook/manage-faqs.md#update-an-answer).
+Proposals currently add new FAQs. They do not create skills or revise existing entries. To correct an existing answer, use [FAQ versioning](/content/develop/ai/context-engine/agent-playbooks/manage-faqs.md#update-an-answer).
-Start with the walkthrough, or [automate suggestions](/content/develop/ai/context-engine/agent-playbook/proposals.md#automate-proposal-generation) from Redis Agent Memory or your own application. Suggestions do not affect agent responses until you publish the accepted FAQ.
+Start with the walkthrough, or [automate suggestions](/content/develop/ai/context-engine/agent-playbooks/proposals.md#automate-proposal-generation) from Redis Agent Memory or your own application. Suggestions do not affect agent responses until you publish the accepted FAQ.
-
+
{width="700"}
## Before you begin
@@ -28,7 +28,7 @@ Use an existing playbook and application programming interface (API) keys with t
- `write` to edit, accept, dismiss, restore, or purge proposals.
- `publish` to publish the FAQ returned by acceptance.
-For this walkthrough, give `PLAYBOOK_API_KEY` all three permissions and follow the quickstart's [client setup]({{< relref "/develop/ai/context-engine/agent-playbook/quickstart#connect-to-the-playbook" >}}). Append the snippets in order and run each write once. In your application, you can separate suggestion, review, and publication across keys.
+For this walkthrough, give `PLAYBOOK_API_KEY` all three permissions and follow the quickstart's [client setup]({{< relref "/develop/ai/context-engine/agent-playbooks/quickstart#connect-to-the-playbook" >}}). Append the snippets in order and run each write once. In your application, you can separate suggestion, review, and publication across keys.
## Find proposals to review
@@ -38,7 +38,7 @@ For software development kit (SDK) and cURL lists, follow the cursor until it is
{{< clients-example set="iris_playbook_proposals" step="playbook-proposal-inbox" description="" lang_filter="Python (Iris),cURL (Iris),CLI (Iris)" footer="hide" />}}
-Search before submitting another candidate. Compare similar questions to decide whether they need the same answer. Proposal search covers open candidates, not trash, accepted proposals, or [published FAQs](/content/develop/ai/context-engine/agent-playbook/retrieval.md#search).
+Search before submitting another candidate. Compare similar questions to decide whether they need the same answer. Proposal search covers open candidates, not trash, accepted proposals, or [published FAQs](/content/develop/ai/context-engine/agent-playbooks/retrieval.md#search).
{{< clients-example set="iris_playbook_proposals" step="playbook-proposal-search" description="" lang_filter="Python (Iris),cURL (Iris),CLI (Iris)" footer="hide" />}}
@@ -56,7 +56,7 @@ The CLI takes a flat FAQ candidate file and a separate source file in JavaScript
If creation or replacement returns `409` with type `/errors/proposal-already-exists`, read the existing proposal. Python exposes its identifier as `error.data.existing_proposal_id` on `PlaybookConflictErrorResponseContent`.
-If the open candidate addresses the same need, [attach evidence]({{< relref "/develop/ai/context-engine/agent-playbook/proposals#attach-evidence" >}}) to it rather than creating another suggestion. Review its current revision before editing or accepting it.
+If the open candidate addresses the same need, [attach evidence]({{< relref "/develop/ai/context-engine/agent-playbooks/proposals#attach-evidence" >}}) to it rather than creating another suggestion. Review its current revision before editing or accepting it.
## Attach evidence
@@ -73,7 +73,7 @@ Include a supporting passage and a reference the reviewer can check. Redis Agent
Evidence is immutable. Retrying the same identifier and payload returns `alreadyPresent`. Reusing that identifier for changed content returns a conflict. Use a new identifier for a new observation.
-The creation source explains the first suggestion and does not increase `evidenceCount`. Attached evidence stays with the proposal; acceptance does not copy it into the FAQ. Check [evidence limits]({{< relref "/develop/ai/context-engine/agent-playbook/limits#proposal-and-evidence-limits" >}}) before attaching large passages.
+The creation source explains the first suggestion and does not increase `evidenceCount`. Attached evidence stays with the proposal; acceptance does not copy it into the FAQ. Check [evidence limits]({{< relref "/develop/ai/context-engine/agent-playbooks/limits#proposal-and-evidence-limits" >}}) before attaching large passages.
This example attaches a policy excerpt. The cURL and CLI tabs use `openssl` to generate an identifier.
@@ -99,7 +99,7 @@ Add the excerpt's guidance about card details. Preserve the other fields from th
Dismiss a candidate you do not want to accept. You can inspect or restore it from trash before its retention deadline. Restore it before editing, attaching evidence, or accepting it.
-Open proposals also expire. Check `inboxExpiresAt` and `purgeAt`, and see [review and retention limits](/content/develop/ai/context-engine/agent-playbook/limits.md#proposal-and-evidence-limits) for how activity changes those deadlines.
+Open proposals also expire. Check `inboxExpiresAt` and `purgeAt`, and see [review and retention limits](/content/develop/ai/context-engine/agent-playbooks/limits.md#proposal-and-evidence-limits) for how activity changes those deadlines.
Purge a trashed proposal to remove it permanently. Save any review records your application needs first.
@@ -109,7 +109,7 @@ Test dismissal and restoration before accepting the sample. Purging instead ends
## Accept and publish
-Call `accept_proposal` with the revision you reviewed. Acceptance creates one unpublished FAQ. Use the entry identifier and version in `result.versionCreated` to read that FAQ, then [publish the reviewed version]({{< relref "/develop/ai/context-engine/agent-playbook/manage-faqs#publish-a-version" >}}) with a key that has `publish` permission.
+Call `accept_proposal` with the revision you reviewed. Acceptance creates one unpublished FAQ. Use the entry identifier and version in `result.versionCreated` to read that FAQ, then [publish the reviewed version]({{< relref "/develop/ai/context-engine/agent-playbooks/manage-faqs#publish-a-version" >}}) with a key that has `publish` permission.
A proposal being accepted (`promoting`) or already accepted (`promoted`) cannot be edited. If acceptance is interrupted, retry it rather than creating another FAQ. The returned receipt is historical: it does not contain the answer or confirm that the FAQ still exists. Inspect the FAQ before acting on a retried result.
@@ -125,7 +125,7 @@ Publish the returned FAQ version after review.
{{< clients-example set="iris_playbook_proposals" step="playbook-proposal-publish" description="" lang_filter="Python (Iris),cURL (Iris),CLI (Iris)" footer="hide" />}}
-The accepted FAQ remains after this example. Delete it with the [FAQ cleanup procedure]({{< relref "/develop/ai/context-engine/agent-playbook/manage-faqs#withdraw-or-delete-an-faq" >}}) using the returned entry identifier when you finish.
+The accepted FAQ remains after this example. Delete it with the [FAQ cleanup procedure]({{< relref "/develop/ai/context-engine/agent-playbooks/manage-faqs#withdraw-or-delete-an-faq" >}}) using the returned entry identifier when you finish.
## Inspect promotion history
@@ -146,7 +146,7 @@ Both paths feed the same review inbox. They currently support new FAQs; skill ex
1. [Record session events in Redis Agent Memory](/content/develop/ai/context-engine/agent-memory/developer-guide.md#work-with-session-memory), including user questions and agent responses under the correct conversation identity. Retrieving playbook knowledge alone does not record an interaction.
1. Ask your administrator to configure and enable extraction for the source store and destination playbook. Proposal permissions alone do not enable it.
-1. Let a representative conversation become idle, then [inspect the inbox](/content/develop/ai/context-engine/agent-playbook/proposals.md#find-proposals-to-review) for suggestions and new evidence.
+1. Let a representative conversation become idle, then [inspect the inbox](/content/develop/ai/context-engine/agent-playbooks/proposals.md#find-proposals-to-review) for suggestions and new evidence.
Each playbook can extract from one whole Redis Agent Memory store in the same tenant; selecting individual namespaces is not supported. Keep source conversations available for extraction and review. Later events in a completed conversation do not automatically trigger another extraction.
@@ -154,24 +154,24 @@ Not every conversation produces a proposal. It might still be active, contain no
### Review background extraction results
-Open the proposal's source conversation or supporting quotes and check the generated answer against them. Extraction suggests reusable wording, which can differ from the conversation or reflect conflicting observations. Resolve those differences and remove conversation-specific details before following the [review and publication steps](/content/develop/ai/context-engine/agent-playbook/proposals.md#review-and-edit-a-candidate).
+Open the proposal's source conversation or supporting quotes and check the generated answer against them. Extraction suggests reusable wording, which can differ from the conversation or reflect conflicting observations. Resolve those differences and remove conversation-specific details before following the [review and publication steps](/content/develop/ai/context-engine/agent-playbooks/proposals.md#review-and-edit-a-candidate).
### Generate proposals with the proposal and evidence APIs
Use the Python, cURL, or CLI examples in your application when you need custom sources or generation rules. Redis Agent Memory is optional for this path. Your application selects the source material and generates the suggested answer.
1. Extract a reusable question and answer from the source material, keeping a reference the reviewer can inspect.
-1. Compare it with [published FAQs](/content/develop/ai/context-engine/agent-playbook/retrieval.md#search) and [open proposals](/content/develop/ai/context-engine/agent-playbook/proposals.md#find-proposals-to-review). Check the question, conditions, and audience, rather than relying on similarity scores alone.
-1. [Attach evidence](/content/develop/ai/context-engine/agent-playbook/proposals.md#attach-evidence) if an open candidate addresses the same need. A differing answer can help the reviewer; evidence does not edit the candidate.
-1. [Create a proposal](/content/develop/ai/context-engine/agent-playbook/proposals.md#create-a-proposal) if the answer covers a new need. Save its identifier and revision.
+1. Compare it with [published FAQs](/content/develop/ai/context-engine/agent-playbooks/retrieval.md#search) and [open proposals](/content/develop/ai/context-engine/agent-playbooks/proposals.md#find-proposals-to-review). Check the question, conditions, and audience, rather than relying on similarity scores alone.
+1. [Attach evidence](/content/develop/ai/context-engine/agent-playbooks/proposals.md#attach-evidence) if an open candidate addresses the same need. A differing answer can help the reviewer; evidence does not edit the candidate.
+1. [Create a proposal](/content/develop/ai/context-engine/agent-playbooks/proposals.md#create-a-proposal) if the answer covers a new need. Save its identifier and revision.
1. Route the candidate to a reviewer before accepting and publishing it.
Use a key with `propose` permission, which includes `read`. Keep review and publication permissions separate. Put source identifiers in `source.reference` and supporting material in `source.content`, using JSON objects appropriate to your source.
#### Handle retries and concurrent observations
-Persist evidence identifiers and their original payloads before submission so a background job can follow the [exact-retry rules](/content/develop/ai/context-engine/agent-playbook/proposals.md#attach-evidence). Do not generate another identifier on each retry.
+Persist evidence identifiers and their original payloads before submission so a background job can follow the [exact-retry rules](/content/develop/ai/context-engine/agent-playbooks/proposals.md#attach-evidence). Do not generate another identifier on each retry.
-Proposal creation is not idempotent: after an uncertain response, inspect the inbox before creating again. Follow [existing-candidate handling](/content/develop/ai/context-engine/agent-playbook/proposals.md#handle-an-existing-candidate) for duplicate errors. Concurrent submissions can still produce equivalent candidates that need review.
+Proposal creation is not idempotent: after an uncertain response, inspect the inbox before creating again. Follow [existing-candidate handling](/content/develop/ai/context-engine/agent-playbooks/proposals.md#handle-an-existing-candidate) for duplicate errors. Concurrent submissions can still produce equivalent candidates that need review.
-Recheck the proposal if its state changes, and leave restoration or edits to an authorized reviewer. Check [proposal and evidence limits](/content/develop/ai/context-engine/agent-playbook/limits.md#proposal-and-evidence-limits) and retain failed observations for investigation instead of retrying permanent validation errors.
+Recheck the proposal if its state changes, and leave restoration or edits to an authorized reviewer. Check [proposal and evidence limits](/content/develop/ai/context-engine/agent-playbooks/limits.md#proposal-and-evidence-limits) and retain failed observations for investigation instead of retrying permanent validation errors.
diff --git a/content/develop/ai/context-engine/agent-playbook/quickstart.md b/content/develop/ai/context-engine/agent-playbooks/quickstart.md
similarity index 78%
rename from content/develop/ai/context-engine/agent-playbook/quickstart.md
rename to content/develop/ai/context-engine/agent-playbooks/quickstart.md
index 43009db423..c5790b556c 100644
--- a/content/develop/ai/context-engine/agent-playbook/quickstart.md
+++ b/content/develop/ai/context-engine/agent-playbooks/quickstart.md
@@ -19,14 +19,14 @@ Create a playbook API key with `write` and `publish` permissions. Both include `
This walkthrough needs no agent framework or model-provider key.
-Follow one tab throughout the page. The Python SDK and command-line interface (CLI) are alpha prereleases pinned to the version used here. Both require Python 3.11 or later. The cURL and CLI examples use Bash and jq.
+Follow one tab throughout the page. The Python SDK and command-line interface (CLI) are prereleases. Both require Python 3.11 or later. The cURL and CLI examples use Bash and jq. To connect the CLI to your deployment with a profile, see [SDK and CLI setup](/content/develop/ai/context-engine/sdk-and-cli.md).
**Python and CLI**
```bash
python -m venv .venv
source .venv/bin/activate
-python -m pip install redis-iris==0.1.0a4
+python -m pip install redis-iris
```
{{< note >}}
@@ -52,7 +52,7 @@ export PLAYBOOK_API_KEY=''
Keep keys out of skill files, source control, and model prompts.
-The Python examples use the unified `redis-iris` package. `AgentPlaybook` provides discovery and skill-loading helpers; its public `.client` property exposes the generated SDK for authoring, search, and review. The CLI tab exports the standard `IRIS_AGENT_PLAYBOOK_*` connection variables and runs `iris agent-playbook` commands directly. Commands use `--json` when saving a response or processing it with jq.
+The Python examples use the unified `redis-iris` package. `AgentPlaybooks` provides discovery and skill-loading helpers; its public `.client` property exposes the generated SDK for authoring, search, and review. The CLI tab exports the standard `IRIS_AGENT_PLAYBOOKS_*` connection variables and runs `iris agent-playbooks` commands directly. Commands use `--json` when saving a response or processing it with jq.
## Connect to the playbook
@@ -90,7 +90,7 @@ Search with a paraphrase of the stored question.
{{< clients-example set="iris_playbook_quickstart" step="playbook-quickstart-search" description="" lang_filter="Python (Iris),cURL (Iris),CLI (Iris)" footer="hide" />}}
-Check for your entry identifier, version `1`, and the answer about order history. Scores and rankings vary with the embedding model and other entries. If no match appears, repeat only the search after a short wait, then check the locale filter and [similarity threshold]({{< relref "/develop/ai/context-engine/agent-playbook/retrieval#control-relevance-and-result-count" >}}).
+Check for your entry identifier, version `1`, and the answer about order history. Scores and rankings vary with the embedding model and other entries. If no match appears, repeat only the search after a short wait, then check the locale filter and [similarity threshold]({{< relref "/develop/ai/context-engine/agent-playbooks/retrieval#control-relevance-and-result-count" >}}).
## Discover FAQs for an agent
@@ -114,7 +114,7 @@ The result for your FAQ should now identify version `2` and include the added se
## Clean up
-Keep the sample published while testing [an agent]({{< relref "/develop/ai/context-engine/agent-playbook/agent-integration" >}}). Complete-program copies retain the FAQ. When you finish, set `PLAYBOOK_FAQ_ID` to the printed entry identifier and run the deletion example with the same connection values. [Withdraw it]({{< relref "/develop/ai/context-engine/agent-playbook/manage-faqs#withdraw-or-delete-an-faq" >}}) instead to retain history.
+Keep the sample published while testing [an agent]({{< relref "/develop/ai/context-engine/agent-playbooks/agent-integration" >}}). Complete-program copies retain the FAQ. When you finish, set `PLAYBOOK_FAQ_ID` to the printed entry identifier and run the deletion example with the same connection values. [Withdraw it]({{< relref "/develop/ai/context-engine/agent-playbooks/manage-faqs#withdraw-or-delete-an-faq" >}}) instead to retain history.
{{< clients-example set="iris_playbook_quickstart_delete" step="playbook-quickstart-delete" description="" lang_filter="Python (Iris),cURL (Iris),CLI (Iris)" footer="hide" />}}
@@ -124,11 +124,11 @@ Unified Python helpers use names such as `adiscover` and `askill`. Generated ope
{{< clients-example set="iris_playbook_async" step="playbook-async-search" description="" lang_filter="Python (Iris)" footer="hide" />}}
-`AgentPlaybookSettings.timeout` sets the request timeout in seconds. Generated `.client` operations accept `timeout_ms` in milliseconds. For custom transport settings, construct a generated client and pass it to `AgentPlaybook(client=...)`. See the [generated client's custom HTTP client documentation](https://pypi.org/project/redis-agent-playbook/0.1.0a3/#custom-http-client) for ownership and configuration details.
+`AgentPlaybooksSettings.timeout` sets the request timeout in seconds. Generated `.client` operations accept `timeout_ms` in milliseconds. For custom transport settings, construct a generated client and pass it to `AgentPlaybooks(client=...)`. See the [generated client's custom HTTP client documentation](https://pypi.org/project/redis-agent-playbook/#custom-http-client) for ownership and configuration details.
## Next steps
-- [Manage FAQs]({{< relref "/develop/ai/context-engine/agent-playbook/manage-faqs" >}}) to roll back or withdraw an answer.
-- [Manage skills]({{< relref "/develop/ai/context-engine/agent-playbook/manage-skills" >}}) to publish a procedure and load supporting files.
-- [Review proposals]({{< relref "/develop/ai/context-engine/agent-playbook/proposals" >}}) to accept suggested answers before publishing them.
-- [Integrate with an agent]({{< relref "/develop/ai/context-engine/agent-playbook/agent-integration" >}}) to retrieve context before a turn and load skills through MCP.
+- [Manage FAQs]({{< relref "/develop/ai/context-engine/agent-playbooks/manage-faqs" >}}) to roll back or withdraw an answer.
+- [Manage skills]({{< relref "/develop/ai/context-engine/agent-playbooks/manage-skills" >}}) to publish a procedure and load supporting files.
+- [Review proposals]({{< relref "/develop/ai/context-engine/agent-playbooks/proposals" >}}) to accept suggested answers before publishing them.
+- [Integrate with an agent]({{< relref "/develop/ai/context-engine/agent-playbooks/agent-integration" >}}) to retrieve context before a turn and load skills through MCP.
diff --git a/content/develop/ai/context-engine/agent-playbook/retrieval.md b/content/develop/ai/context-engine/agent-playbooks/retrieval.md
similarity index 88%
rename from content/develop/ai/context-engine/agent-playbook/retrieval.md
rename to content/develop/ai/context-engine/agent-playbooks/retrieval.md
index 127e26961d..f18e39e05c 100644
--- a/content/develop/ai/context-engine/agent-playbook/retrieval.md
+++ b/content/develop/ai/context-engine/agent-playbooks/retrieval.md
@@ -13,8 +13,8 @@ weight: 50
Retrieve published knowledge for the user's task. Choose a retrieval method:
-- [**Discovery**]({{< relref "/develop/ai/context-engine/agent-playbook/retrieval#discovery" >}}) combines FAQ answers and skill previews so the agent can choose what to use.
-- [**Search**]({{< relref "/develop/ai/context-engine/agent-playbook/retrieval#search" >}}) returns one entry type when your application needs answers or skill previews, with a relevance threshold and result count for each request.
+- [**Discovery**]({{< relref "/develop/ai/context-engine/agent-playbooks/retrieval#discovery" >}}) combines FAQ answers and skill previews so the agent can choose what to use.
+- [**Search**]({{< relref "/develop/ai/context-engine/agent-playbooks/retrieval#search" >}}) returns one entry type when your application needs answers or skill previews, with a relevance threshold and result count for each request.
Both methods serve current publications. They exclude drafts, historical versions, and proposals.
@@ -22,13 +22,13 @@ Both methods serve current publications. They exclude drafts, historical version
Use a data-plane endpoint, playbook identifier, and API key with `read` permission. Publish the entries you want to retrieve before testing them.
-Start with the quickstart's [client setup]({{< relref "/develop/ai/context-engine/agent-playbook/quickstart#connect-to-the-playbook" >}}) with a reader key, then append this page's snippets in order. The examples use the published FAQ and skill from the task guides; keep them published until testing is complete.
+Start with the quickstart's [client setup]({{< relref "/develop/ai/context-engine/agent-playbooks/quickstart#connect-to-the-playbook" >}}) with a reader key, then append this page's snippets in order. The examples use the published FAQ and skill from the task guides; keep them published until testing is complete.
## Discovery
Discovery returns answers and skill previews within a shared result limit. Pins include required entries; a preview budget limits returned content.
-Use Python's `discover` helper, send an HTTP discovery request, or call `discover_entries` through [MCP]({{< relref "/develop/ai/context-engine/agent-playbook/mcp" >}}). Load selected skill instructions and files with [progressive disclosure]({{< relref "/develop/ai/context-engine/agent-playbook/retrieval#load-skills-with-progressive-disclosure" >}}).
+Use Python's `discover` helper, send an HTTP discovery request, or call `discover_entries` through [MCP]({{< relref "/develop/ai/context-engine/agent-playbooks/mcp" >}}). Load selected skill instructions and files with [progressive disclosure]({{< relref "/develop/ai/context-engine/agent-playbooks/retrieval#load-skills-with-progressive-disclosure" >}}).
Request up to five entries for the agent's task:
@@ -55,7 +55,7 @@ The request controls are:
| Control | Use it to |
|:--------|:----------|
| `query` | Describe the agent's task. Required even when supplying pins. |
-| `filter` | Restrict semantic matches by attributes. Uses the same [filter expressions as search]({{< relref "/develop/ai/context-engine/agent-playbook/retrieval#select-an-audience-with-filters" >}}); pins bypass it. |
+| `filter` | Restrict semantic matches by attributes. Uses the same [filter expressions as search]({{< relref "/develop/ai/context-engine/agent-playbooks/retrieval#select-an-audience-with-filters" >}}); pins bypass it. |
| `limit` | Reduce the combined result count. Omission uses `discovery.maxResults`, which also caps an explicit limit. |
| `pinnedEntries` | Require known published entries, in the order supplied. |
@@ -80,7 +80,7 @@ Pins bypass similarity thresholds and the request filter. Choose pins for the in
A missing, unpublished, duplicate, or oversized pin fails the request. Use pins to test connectivity or include required content; evaluate semantic relevance without them.
-Export the identifier of a published skill, such as the sample in [Manage skills]({{< relref "/develop/ai/context-engine/agent-playbook/manage-skills" >}}), before cleanup:
+Export the identifier of a published skill, such as the sample in [Manage skills]({{< relref "/develop/ai/context-engine/agent-playbooks/manage-skills" >}}), before cleanup:
```bash
export PLAYBOOK_SKILL_ID=''
@@ -115,7 +115,7 @@ The preview budget applies only to the first step, not loaded instructions, file
Reader keys can load only the current publication. MCP tools apply this restriction even to management keys. For example, discovery can return version `1`, then loading fails because version `2` was published in the meantime. Rediscover once, select again, and load instructions and files from the newly returned version. Keeping an identifier/version pair does not reserve access to an older publication.
-The example loads the skill selected in [Pin required knowledge]({{< relref "/develop/ai/context-engine/agent-playbook/retrieval#pin-required-knowledge" >}}), then fetches its reply template. For a complete MCP client example, see [Connect a client]({{< relref "/develop/ai/context-engine/agent-playbook/mcp#connect-a-client" >}}).
+The example loads the skill selected in [Pin required knowledge]({{< relref "/develop/ai/context-engine/agent-playbooks/retrieval#pin-required-knowledge" >}}), then fetches its reply template. For a complete MCP client example, see [Connect a client]({{< relref "/develop/ai/context-engine/agent-playbooks/mcp#connect-a-client" >}}).
{{< clients-example set="iris_playbook_retrieval" step="playbook-retrieval-load" description="" lang_filter="Python (Iris),cURL (Iris)" footer="hide" />}}
@@ -159,7 +159,7 @@ For example, override the FAQ search threshold and result count for one request:
### Select an audience with filters
-Set attributes when [authoring FAQs]({{< relref "/develop/ai/context-engine/agent-playbook/manage-faqs" >}}) or [uploading skills]({{< relref "/develop/ai/context-engine/agent-playbook/manage-skills" >}}). Filter retrieval by those attributes to select a locale, product, or audience.
+Set attributes when [authoring FAQs]({{< relref "/develop/ai/context-engine/agent-playbooks/manage-faqs" >}}) or [uploading skills]({{< relref "/develop/ai/context-engine/agent-playbooks/manage-skills" >}}). Filter retrieval by those attributes to select a locale, product, or audience.
Filters use exact, typed comparisons. Each filter node has one operator: `eq`, `and`, or `or`.
@@ -167,4 +167,4 @@ An equality filter matches a scalar attribute or a member of a list-valued attri
{{< clients-example set="iris_playbook_retrieval" step="playbook-retrieval-filter" description="" lang_filter="Python (Iris),cURL (Iris),CLI (Iris)" footer="hide" />}}
-Use entry lookup or list operations for management state. Lists use pagination cursors; search and discovery use result limits. See [service limits and errors]({{< relref "/develop/ai/context-engine/agent-playbook/limits" >}}) for request constraints and recovery.
+Use entry lookup or list operations for management state. Lists use pagination cursors; search and discovery use result limits. See [service limits and errors]({{< relref "/develop/ai/context-engine/agent-playbooks/limits" >}}) for request constraints and recovery.
diff --git a/content/develop/ai/context-engine/concepts/_index.md b/content/develop/ai/context-engine/concepts/_index.md
index 4f4374b67b..cb4708c039 100644
--- a/content/develop/ai/context-engine/concepts/_index.md
+++ b/content/develop/ai/context-engine/concepts/_index.md
@@ -9,7 +9,6 @@ hideListLinks: true
linktitle: Concepts
title: How Redis Iris works
weight: 5
-bannerText: Agent Memory and Context Retriever are currently available in preview. Features and behavior are subject to change.
---
Redis Iris sits between your agent and your data. It's one system. Your agent asks for context. Iris returns it through the fastest available path: a cached answer, a remembered fact, or a live lookup against your business data. That data can live in Redis or in another database you connect. You don't wire together separate lookups yourself. Iris decides which path answers the request.
diff --git a/content/develop/ai/context-engine/concepts/interactive-demo.md b/content/develop/ai/context-engine/concepts/interactive-demo.md
index 824fcb3609..26cf8445c3 100644
--- a/content/develop/ai/context-engine/concepts/interactive-demo.md
+++ b/content/develop/ai/context-engine/concepts/interactive-demo.md
@@ -4,12 +4,11 @@ categories:
- docs
- develop
- ai
-description: Step through one agent request across Data Integration, LangCache, Agent Memory, and Context Retriever, then take a service away to see what the agent loses.
+description: Step through one agent request across Data Integration, LangCache, Agent Memory, and Context Gateway, then take a service away to see what the agent loses.
hideListLinks: true
linktitle: Interactive demo
title: Redis Iris interactive demo
weight: 10
-bannerText: Agent Memory and Context Retriever are currently available in preview. Features and behavior are subject to change.
aliases:
- /develop/ai/context-engine/interactive-demo/
---
@@ -25,7 +24,7 @@ The tour runs in your browser and doesn't connect to any service. Each step link
| Service | What it does in this request | Without it |
|:--|:--|:--|
| [Data Integration](/content/develop/ai/context-engine/data-integration/_index.md) | Syncs a change from PostgreSQL to Redis seconds after it happens | The agent reads last night's data and makes a promise it can't keep |
-| Context Retriever | Looks up delivery times, alternatives, and past orders through governed tools | The agent can't check whether the food will arrive in time |
+| Context Gateway | Looks up delivery times, alternatives, and past orders through governed tools | The agent can't check whether the food will arrive in time |
| [Agent Memory](/content/develop/ai/context-engine/agent-memory/_index.md) | Recalls last week's order and the customer's peanut allergy | The agent can find the order, but not the allergy |
| [LangCache](/content/develop/ai/context-engine/langcache/_index.md) | Answers the general delivery fee question from the cache | The model answers it, which takes longer and costs output tokens |
diff --git a/content/develop/ai/context-engine/concepts/request-flow.md b/content/develop/ai/context-engine/concepts/request-flow.md
index 2d85fda2cd..cc5f4d245e 100644
--- a/content/develop/ai/context-engine/concepts/request-flow.md
+++ b/content/develop/ai/context-engine/concepts/request-flow.md
@@ -9,7 +9,6 @@ hideListLinks: true
linktitle: Request flow
title: How a request flows through Redis Iris
weight: 6
-bannerText: Agent Memory and Context Retriever are currently available in preview. Features and behavior are subject to change.
---
[How Redis Iris works]({{< relref "/develop/ai/context-engine/concepts" >}}) covers the mental model. This page traces the same idea through an actual request, capability by capability.
diff --git a/content/develop/ai/context-engine/context-gateway/quickstart.md b/content/develop/ai/context-engine/context-gateway/quickstart.md
index 861c5fb024..237d2f3de9 100644
--- a/content/develop/ai/context-engine/context-gateway/quickstart.md
+++ b/content/develop/ai/context-engine/context-gateway/quickstart.md
@@ -26,16 +26,16 @@ For self-managed setup, [create the Gateways and the agent key](/content/operate
This walkthrough needs no agent framework or model-provider key.
-Follow one tab throughout the page. The Python package and command-line interface (CLI) are alpha prereleases pinned to the version used here. Both require Python 3.11 or later. The cURL and CLI examples use Bash and jq.
+Follow one tab throughout the page. The Python package and command-line interface (CLI) are prereleases. Both require Python 3.11 or later. The cURL and CLI examples use Bash and jq. To connect the CLI to your deployment with a profile, see [SDK and CLI setup](/content/develop/ai/context-engine/sdk-and-cli.md).
-
+
**Python and CLI**
```bash
python -m venv .venv
source .venv/bin/activate
-python -m pip install redis-iris==0.1.0a4
+python -m pip install redis-iris
```
> [!NOTE]
diff --git a/content/develop/ai/context-engine/lens/AGENTS.md b/content/develop/ai/context-engine/lens/AGENTS.md
index 3ad21785d6..d68fd57125 100644
--- a/content/develop/ai/context-engine/lens/AGENTS.md
+++ b/content/develop/ai/context-engine/lens/AGENTS.md
@@ -12,7 +12,7 @@ disclosure, and framing rules for this directory, and wins where the two conflic
| Context Gateway | Context Retriever | In prose. API literals such as `GetContextRetrieverResult` stay as they are. |
| Agent Memory, Agent Playbooks | RAM, Playbook service | The Iris services Lens traces. |
| Iris services | Iris products | Agent Memory, Agent Playbooks, and Context Gateway as a group, matching the other Iris pages. |
-| preview | Beta | Lens availability. |
+| beta | preview | Lens availability. Only Lens and agent_mesh carry a status label; the other Iris services have none. |
`redis-iris` (`redis_iris.lens`) is the instrumentation package. `redis-agent-lens`
(`redis_agent_lens`) is the read client. They read different key variables:
@@ -29,12 +29,12 @@ history. Document the public SDK calls, settings, and API fields.
## Present what Lens does
-Say where a capability is present, not where it's missing. Write "Playbook discovery
+Say where a capability is present, not where it's missing. Write "Agent Playbooks discovery
results include their similarity score", not "Agent Memory recalls have no score". Name
the cases that have a capability, so readers don't assume it applies everywhere.
Leave unshipped and deferred features out entirely. The availability banner is the only
-preview notice; don't add lists of gaps or "coming soon" notes.
+beta notice; don't add lists of gaps or "coming soon" notes.
## Deployments
diff --git a/content/develop/ai/context-engine/lens/_index.md b/content/develop/ai/context-engine/lens/_index.md
index 99776e73b1..c4fc7795fb 100644
--- a/content/develop/ai/context-engine/lens/_index.md
+++ b/content/develop/ai/context-engine/lens/_index.md
@@ -9,7 +9,7 @@ description: Debug AI agent answers by tracing the context behind each turn, fro
linkTitle: Lens
hideListLinks: true
weight: 27
-bannerText: Lens is currently available in preview. Features and behavior are subject to change.
+bannerText: Lens is currently in beta. Features and behavior are subject to change.
bannerChildren: true
---
diff --git a/content/develop/ai/context-engine/lens/agent-integration.md b/content/develop/ai/context-engine/lens/agent-integration.md
index ded03c35d8..32875522a9 100644
--- a/content/develop/ai/context-engine/lens/agent-integration.md
+++ b/content/develop/ai/context-engine/lens/agent-integration.md
@@ -34,7 +34,7 @@ When your agent uses Agent Memory, Agent Playbooks, and Context Gateway, a singl
{{< clients-example set="iris_lens_iris_products" step="iris_products_turn" description="" lang_filter="Python (Iris)" footer="hide" />}}
-The turn shows the memory recall and the Playbook discovery, then any Context Gateway tool calls your agent makes, and the write-back. In asynchronous code, `workflows.aturn()` runs the services' context steps at the same time. The outer `lens.turn()` sets the outcome. When a turn is already open, `workflows.turn()` and `attach()` add their steps to it rather than starting another.
+The turn shows the memory recall and the Agent Playbooks discovery, then any Context Gateway tool calls your agent makes, and the write-back. In asynchronous code, `workflows.aturn()` runs the services' context steps at the same time. The outer `lens.turn()` sets the outcome. When a turn is already open, `workflows.turn()` and `attach()` add their steps to it rather than starting another.
## LangGraph
diff --git a/content/develop/ai/context-engine/lens/concepts.md b/content/develop/ai/context-engine/lens/concepts.md
index 0e7f803ab7..8920bf1cec 100644
--- a/content/develop/ai/context-engine/lens/concepts.md
+++ b/content/develop/ai/context-engine/lens/concepts.md
@@ -21,7 +21,7 @@ A **session** groups the turns of one conversation. A **thread** is a sequence o
Use opaque values, such as internal IDs or hashes, for session, thread, user, and agent IDs.
-
+
{width="700"}
## What a turn records
diff --git a/content/develop/ai/context-engine/lens/configure.md b/content/develop/ai/context-engine/lens/configure.md
index 148ea2078a..e93f70bc82 100644
--- a/content/develop/ai/context-engine/lens/configure.md
+++ b/content/develop/ai/context-engine/lens/configure.md
@@ -17,7 +17,7 @@ Configure the Lens module of the Redis Iris software development kit (SDK) with
| Variable | `LensSettings` field | Description |
| -------- | -------------------- | ----------- |
-| `IRIS_LENS_ENDPOINT` | `endpoint` | The Lens ingest endpoint. Setting it turns Lens on. |
+| `IRIS_LENS_ENDPOINT` | `endpoint` | The Iris host, such as `https://iris.example.com`. The SDK sends turns to `/iris/data/v1beta1/lens/v1/traces` on it. Setting it turns Lens on. |
| `IRIS_LENS_API_KEY` | `api_key` (read from the environment only) | The ingest key, sent with every export. |
| `IRIS_LENS_AGENT_ID` | `agent_id` | The default agent ID for this process. `lens.turn(agent_id=...)` overrides it. |
| `IRIS_LENS_SERVICE_NAME` | `service_name` | The service name recorded on every step. |
@@ -30,7 +30,7 @@ To configure Lens in code, pass `LensSettings` to `Iris`. The key still comes fr
from redis_iris import Iris, IrisSettings
from redis_iris.lens import LensSettings
-settings = LensSettings(endpoint="", agent_id="support-bot")
+settings = LensSettings(endpoint="", agent_id="support-bot")
iris = Iris(IrisSettings(lens=settings))
```
diff --git a/content/develop/ai/context-engine/lens/quickstart.md b/content/develop/ai/context-engine/lens/quickstart.md
index 9aae5c3db7..53877e3b1a 100644
--- a/content/develop/ai/context-engine/lens/quickstart.md
+++ b/content/develop/ai/context-engine/lens/quickstart.md
@@ -17,11 +17,12 @@ Trace one agent turn with the Redis Iris software development kit (SDK), then fi
Get these values from your administrator:
-- The Lens ingest endpoint and an ingest key, for sending turns.
-- The Lens read endpoint, your instance ID, and a read key, for reading them back.
+- The Iris host, such as `https://iris.example.com`. The SDK sends turns there, and the read client reads them back from there.
+- An ingest key, for sending turns.
+- Your instance ID and a read key, for reading turns back.
-You also need Python 3.11 or later. The cURL example uses Bash and jq. This walkthrough needs no agent framework or model provider key.
+You also need Python 3.11 or later. The cURL example uses Bash and jq. This walkthrough needs no agent framework or model provider key. For the configuration `redis-iris` reads across services, see [SDK and CLI setup](/content/develop/ai/context-engine/sdk-and-cli.md).
## Install the SDK
@@ -30,7 +31,7 @@ Install the Redis Iris SDK, which includes Lens instrumentation, and the Lens re
```bash
python -m venv .venv
source .venv/bin/activate
-python -m pip install redis-iris redis-agent-lens
+python -m pip install redis-iris 'redis-agent-lens>=0.1.0a4'
```
## Configure the SDK
@@ -38,16 +39,16 @@ python -m pip install redis-iris redis-agent-lens
Export these values in the shell where you run the example:
```bash
-export IRIS_LENS_ENDPOINT=''
+export IRIS_LENS_ENDPOINT=''
export IRIS_LENS_API_KEY=''
export IRIS_LENS_AGENT_ID='lens-quickstart'
-export LENS_URL=''
+export LENS_URL=''
export LENS_INSTANCE_ID=''
export LENS_API_KEY=''
```
-Setting `IRIS_LENS_ENDPOINT` turns Lens on. Use the endpoint's base address, including `https://`. The SDK sends `IRIS_LENS_API_KEY` with every export, and the read client sends `LENS_API_KEY` with every read.
+Setting `IRIS_LENS_ENDPOINT` turns Lens on. Use the host only, including `https://`. The SDK adds the Lens path. The SDK sends `IRIS_LENS_API_KEY` with every export, and the read client sends `LENS_API_KEY` with every read.
Keep keys out of source control and model prompts.
diff --git a/content/develop/ai/context-engine/lens/read-api.md b/content/develop/ai/context-engine/lens/read-api.md
index ce6b6171c0..66ee7669ca 100644
--- a/content/develop/ai/context-engine/lens/read-api.md
+++ b/content/develop/ai/context-engine/lens/read-api.md
@@ -14,17 +14,17 @@ weight: 35
Use the Lens read application programming interface (API) to list sessions and read turns from code, for example to export failed turns or build your own reports. The Python examples use the Lens read client:
```bash
-python -m pip install redis-agent-lens
+python -m pip install 'redis-agent-lens>=0.1.0a4'
```
The cURL examples use Bash and jq. Every operation is a `GET` request.
## Authenticate
-Export the read endpoint, your instance ID, and a read key:
+Export the Iris host, your instance ID, and a read key:
```bash
-export LENS_URL=''
+export LENS_URL=''
export LENS_INSTANCE_ID=''
export LENS_API_KEY=''
```
diff --git a/content/develop/ai/context-engine/sdk-and-cli.md b/content/develop/ai/context-engine/sdk-and-cli.md
new file mode 100644
index 0000000000..f4198d4773
--- /dev/null
+++ b/content/develop/ai/context-engine/sdk-and-cli.md
@@ -0,0 +1,165 @@
+---
+alwaysopen: false
+categories:
+- docs
+- develop
+- ai
+description: Install the redis-iris SDK and iris CLI, connect them to Redis Cloud or a self-managed deployment.
+hideListLinks: true
+linktitle: SDK and CLI setup
+title: Set up Redis Iris with the SDK and CLI
+weight: 7
+---
+
+The `redis-iris` package is a Python software development kit (SDK) with one object per Redis Iris service, plus the `iris` command-line interface (CLI), which creates services, mints keys, and checks connections. Your agent reads only `IRIS_*` environment variables, so the same code runs on Redis Cloud and on a self-managed deployment.
+
+Start with a service's quickstart: [Agent Memory](/content/develop/ai/context-engine/agent-memory/quickstart.md), [Agent Playbooks](/content/develop/ai/context-engine/agent-playbooks/quickstart.md), [Context Gateway](/content/develop/ai/context-engine/context-gateway/quickstart.md), or [Lens](/content/develop/ai/context-engine/lens/quickstart.md). This page covers the setup they share.
+
+## Install the SDK and CLI
+
+Both require Python 3.11 or later.
+
+```bash
+python -m pip install redis-iris # the SDK, in your project's virtual environment
+pipx install redis-iris # the iris CLI, in its own environment
+iris --version
+```
+
+## Learn the command shape
+
+Every command has the same shape. Shared options go before the service name:
+
+```bash
+iris [shared options] [arguments] [options]
+```
+
+For example, this command syncs a folder of FAQs to a playbook:
+
+```bash
+iris --json --profile suite agent-playbooks faqs sync ./faqs --publish changed
+```
+
+| Part | Role | What it does |
+|---|---|---|
+| `--json --profile suite` | Shared options | Print the result as one JSON value, and use the `suite` profile from `iris.toml`. |
+| `agent-playbooks` | Service | Target Agent Playbooks. |
+| `faqs sync` | Noun and verb | Make the playbook's FAQs match the files. |
+| `./faqs` | Argument | The folder of FAQ files to sync. |
+| `--publish changed` | Option | Publish the new version of each FAQ that changed. Other FAQs keep their published version. |
+
+| Service group | What it manages |
+|---|---|
+| `agent-memory` | Agent Memory stores, memories, and sessions |
+| `agent-playbooks` | Agent Playbooks, FAQs, skills, proposals, and extraction from Agent Memory |
+| `context-gateway` | Context Gateways, their upstreams and tool policies, and tool calls |
+| `intent-router` | Intent Routers, intents, examples, and matching |
+| `identity` | Agent keys for every service: list, rotate, and revoke |
+
+`--json` prints one JSON value, `--no-input` never prompts, and `--profile` selects a configuration profile. Run `iris --help` for each command's options.
+
+For every command, see the [redis-iris CLI reference](https://github.com/redis/redis-iris#the-cli), or give your coding agent that link.
+
+
+## Set up on Redis Cloud
+
+On Redis Cloud, the [Redis Cloud console](https://cloud.redis.io/) creates services and keys, and the CLI checks the connection. These steps use Agent Playbooks. The other Redis Iris services follow the same steps with their own console pages and `IRIS__*` variables.
+
+1. In the Redis Cloud console, go to **Iris AI** > **Agent Playbooks** > **New playbook**. Choose a name, database, and embedding model, then select **Create Playbook**.
+1. On the playbook's **Connect** tab, copy the **Agent endpoint** and the **Playbook ID**. Select **Create agent API key** > **Create key**, and copy the key. It's shown only once.
+1. Save the values in a `.env` file:
+
+ ```bash
+ IRIS_AGENT_PLAYBOOKS_URL=
+ IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID=
+ IRIS_AGENT_PLAYBOOKS_API_KEY=
+ ```
+
+1. Optional, but recommended: create `iris.toml` with a cloud profile, and add `IRIS_PROFILE=cloud` and `IRIS_CONFIG=./iris.toml` to `.env`. One `iris.toml` holds the URLs for every Redis Iris service you use, so the CLI and SDK manage them together, and switching deployments means switching one profile. See the [Redis Cloud project setup example](https://github.com/redis/redis-iris/tree/main/examples/project_setup/cloud).
+
+ ```toml
+ [profiles.cloud]
+ kind = "cloud"
+
+ [profiles.cloud.agent_playbooks]
+ url = ""
+ ```
+
+1. Load the values and check the connection with the agent key:
+
+ ```bash
+ set -a; source .env; set +a
+ iris agent-playbooks health
+ ```
+
+ A working playbook reports `status: ready`.
+
+## Set up on a self-managed deployment
+
+On a self-managed deployment, the CLI creates services and keys with your operator tokens. Each token is the deployment's static admin token or an access token from your identity provider.
+
+The services deploy on Kubernetes from the shared Redis Helm repository, `https://helm.redis.io/ai`. See [deploy self-managed Agent Memory](/content/operate/iris/agent-memory/self-managed/deploy.md) and [deploy self-managed Context Gateway](/content/operate/iris/context-gateway/self-managed/deploy.md). For a complete project, see the [self-managed project setup example](https://github.com/redis/redis-iris/tree/main/examples/project_setup/onprem).
+
+1. Create `iris.toml` with a profile for your deployment. It holds URLs only:
+
+ ```toml
+ [profiles.suite]
+ kind = "self-managed"
+
+ [profiles.suite.agent_playbooks]
+ service_url = ""
+ url = ""
+ identity_url = ""
+ ```
+
+1. Put the operator tokens in a `.env.admin` file. Keep them out of your agent's `.env`:
+
+ ```bash
+ IRIS_CONFIG=./iris.toml
+ IRIS_PROFILE=suite
+ IRIS_AGENT_PLAYBOOKS_SERVICE_TOKEN=
+ IRIS_AGENT_PLAYBOOKS_IDENTITY_TOKEN=
+ ```
+
+1. Load the tokens and do a dry run. It sends nothing, and `missing: nothing` means the real run has every credential and URL it needs:
+
+ ```bash
+ set -a; source .env.admin; set +a
+ iris agent-playbooks service create --name support-playbook --dry-run
+ ```
+
+1. Create the playbook. The CLI mints its agent key and writes the URL, ID, and key to `.env`. It never prints the key:
+
+ ```bash
+ iris agent-playbooks service create --name support-playbook --write-env .env
+ ```
+
+1. Check every hop, from the service to a read with the agent key:
+
+ ```bash
+ set -a; source .env; set +a
+ iris agent-playbooks service check "$IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID" --env-file .env
+ ```
+
+Agent Memory, Context Gateway, and Intent Router follow the same steps with their own `service create` options.
+
+## Configure profiles and credentials
+
+The CLI takes each setting from the first of these that sets it: a command option, an environment variable, the selected profile in `iris.toml`, the file's shared tables, then a built-in default.
+
+| Key in a profile | Meaning |
+|---|---|
+| `kind` | `self-managed` (the default) or `cloud` |
+| `service_url` | The service's control plane, which the CLI calls |
+| `url` | The data plane your agent calls. The CLI writes it into `.env` |
+| `identity_url` | The Identity Service that mints this service's keys |
+| `[profiles..identity]` `url`, `tenant` | An Identity Service shared by every service, and its tenant |
+
+`iris.toml` never holds secrets. A token or API key in it stops the CLI with exit code 2. Tokens and keys come only from environment variables or the files the CLI writes.
+
+## More information
+
+- [The `iris` CLI in the redis-iris README](https://github.com/redis/redis-iris#the-cli)
+- [Configuration guide](https://github.com/redis/redis-iris/blob/main/docs/user_guides/configuration.md)
+- [Provision without the UI](https://github.com/redis/redis-iris/blob/main/docs/user_guides/provision-without-the-ui.md)
+- [Starter configuration for Redis Cloud and self-managed projects](https://github.com/redis/redis-iris/tree/main/examples/project_setup)
+- [redis-iris examples](https://github.com/redis/redis-iris/tree/main/examples), including adding Redis Iris to an agent you already have
diff --git a/content/embeds/rc-agent-memory-quickstart-prerequisites.md b/content/embeds/rc-agent-memory-quickstart-prerequisites.md
index 4f18586894..5a8566510b 100644
--- a/content/embeds/rc-agent-memory-quickstart-prerequisites.md
+++ b/content/embeds/rc-agent-memory-quickstart-prerequisites.md
@@ -3,6 +3,6 @@
The database must be active, run a supported Redis version, and use a Pro or Essentials plan. It must also have a public endpoint, Redis Search, and the default user enabled.
-Redis Agent Memory doesn't support Flex, Active-Active, or AWS PrivateLink databases during public preview.
+Redis Agent Memory doesn't support Flex, Active-Active, or AWS PrivateLink databases.
For the complete list, see [prerequisites and limitations]({{< relref "/operate/iris/agent-memory/create-service#prerequisites-and-limitations" >}}).
diff --git a/content/operate/iris/_index.md b/content/operate/iris/_index.md
index 16ebe6b460..3a2678ff33 100644
--- a/content/operate/iris/_index.md
+++ b/content/operate/iris/_index.md
@@ -9,14 +9,10 @@ categories:
- iris
hideListLinks: true
weight: 45
-bannerText: Agent Memory and Context Retriever are currently available in preview. Features and behavior are subject to change.
---
Redis Iris context engine provides managed and self-managed services for building AI applications with persistent memory, semantic caching, and governed access to business data.
-
-{width="100%" class="border border-redis-pen-300 rounded-lg"}
-
Use this section to deploy, configure, and operate Redis Iris services. Developer guides and API integration documentation remain under [Develop with Redis]({{< relref "/develop/ai/context-engine" >}}).
diff --git a/content/operate/iris/agent-memory/self-managed/configuration.md b/content/operate/iris/agent-memory/self-managed/configuration.md
index d1c05e0915..a3b152a2b5 100644
--- a/content/operate/iris/agent-memory/self-managed/configuration.md
+++ b/content/operate/iris/agent-memory/self-managed/configuration.md
@@ -277,9 +277,9 @@ and internal token values in both namespaces, plus each namespace's trust bundle
to reach Identity Service and Identity Service to reach the Control Plane, including any
TLS proxies. See [Network policy](/content/operate/iris/agent-memory/self-managed/operations.md#network-policy).
-## Optional Playbook extraction
+## Optional Agent Playbooks extraction
-On the Identity Service release, allow Memory subject grants for Playbook extraction:
+On the Identity Service release, allow Memory subject grants for Agent Playbooks extraction:
```yaml
subjectGrants:
diff --git a/content/operate/rc/context-engine/agent-memory/_index.md b/content/operate/rc/context-engine/agent-memory/_index.md
index f15dea9719..9767bce0ce 100644
--- a/content/operate/rc/context-engine/agent-memory/_index.md
+++ b/content/operate/rc/context-engine/agent-memory/_index.md
@@ -9,7 +9,6 @@ hideListLinks: true
linktitle: Redis Agent Memory
title: Redis Agent Memory on Redis Cloud
weight: 10
-bannerText: Redis Agent Memory on Redis Cloud is currently available as a public preview. Features and behavior are subject to change.
aliases:
- /operate/rc/agent-memory/
---
diff --git a/layouts/shortcodes/iris-demo.html b/layouts/shortcodes/iris-demo.html
index ad83003241..43f95f49df 100644
--- a/layouts/shortcodes/iris-demo.html
+++ b/layouts/shortcodes/iris-demo.html
@@ -3,7 +3,7 @@
---------
Scripted, dependency-free tour of Redis Iris as one system, one step at
a time: data enters through Data Integration, then a single agent
- request draws on LangCache, Agent Memory, and Context Retriever. Each
+ request draws on LangCache, Agent Memory, and Context Gateway. Each
step links to that service's own demo for depth, and the last step
takes one service away to show what the agent loses. Runs entirely in
the browser; no service is called.
diff --git a/local_examples/iris/lens/quickstart/quickstart.sh b/local_examples/iris/lens/quickstart/quickstart.sh
index a0764edade..d8776c2fe9 100644
--- a/local_examples/iris/lens/quickstart/quickstart.sh
+++ b/local_examples/iris/lens/quickstart/quickstart.sh
@@ -3,7 +3,7 @@ set -euo pipefail
# STEP_START find_turn
curl --fail-with-body --silent --show-error \
- "${LENS_URL%/}/v1/instances/$LENS_INSTANCE_ID/turns/$TURN_ID" \
+ "${LENS_URL%/}/iris/data/v1beta1/lens/instances/$LENS_INSTANCE_ID/turns/$TURN_ID" \
-H "Authorization: Bearer $LENS_API_KEY" \
| jq '{outcome, sources: [.manifest.entries[] | {source, fetchedCount, usedCount}]}'
# STEP_END
diff --git a/local_examples/iris/lens/read_api/read_api.sh b/local_examples/iris/lens/read_api/read_api.sh
index 98d6c4ec0e..1c5afb98b6 100644
--- a/local_examples/iris/lens/read_api/read_api.sh
+++ b/local_examples/iris/lens/read_api/read_api.sh
@@ -2,7 +2,7 @@
set -euo pipefail
# STEP_START connect
-LENS_API="${LENS_URL%/}/v1/instances/$LENS_INSTANCE_ID"
+LENS_API="${LENS_URL%/}/iris/data/v1beta1/lens/instances/$LENS_INSTANCE_ID"
AUTH="Authorization: Bearer $LENS_API_KEY"
# STEP_END
diff --git a/local_examples/iris/playbooks/async/async_example.py b/local_examples/iris/playbooks/async/async_example.py
index 26cb0ac885..6d52dbdd3b 100644
--- a/local_examples/iris/playbooks/async/async_example.py
+++ b/local_examples/iris/playbooks/async/async_example.py
@@ -3,12 +3,12 @@
import asyncio
import os
-from redis_iris.agent_playbook import AgentPlaybook, AgentPlaybookSettings
+from redis_iris.agent_playbooks import AgentPlaybooks, AgentPlaybooksSettings
async def main():
- async with AgentPlaybook(
- AgentPlaybookSettings(
+ async with AgentPlaybooks(
+ AgentPlaybooksSettings(
url=os.environ["PLAYBOOK_URL"],
playbook_id=os.environ["PLAYBOOK_ID"],
api_key=os.environ["PLAYBOOK_API_KEY"],
diff --git a/local_examples/iris/playbooks/faqs/faqs.cli.sh b/local_examples/iris/playbooks/faqs/faqs.cli.sh
index 52d8c4ba2a..bd96a42593 100644
--- a/local_examples/iris/playbooks/faqs/faqs.cli.sh
+++ b/local_examples/iris/playbooks/faqs/faqs.cli.sh
@@ -1,10 +1,10 @@
# EXAMPLE: iris_playbook_faqs
# HIDE_START
set -euo pipefail
-export IRIS_AGENT_PLAYBOOK_URL="$PLAYBOOK_URL"
-export IRIS_AGENT_PLAYBOOK_ID="$PLAYBOOK_ID"
-export IRIS_AGENT_PLAYBOOK_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
-iris agent-playbook health
+export IRIS_AGENT_PLAYBOOKS_URL="$PLAYBOOK_URL"
+export IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID="$PLAYBOOK_ID"
+export IRIS_AGENT_PLAYBOOKS_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
+iris agent-playbooks health
# HIDE_END
# STEP_START playbook-faq-create
@@ -17,19 +17,19 @@ cat > faq.json <<'JSON'
"attributes": {"locale": "en-US", "topic": "refund"}
}
JSON
-iris agent-playbook faqs validate faq.json
-iris --json agent-playbook faqs push faq.json > faq-draft.json
+iris agent-playbooks faqs validate faq.json
+iris --json agent-playbooks faqs push faq.json > faq-draft.json
FAQ_ID=$(jq -er '.results[0].entryId' faq-draft.json)
VERSION=$(jq -er '.results[0].version' faq-draft.json)
jq . faq-draft.json
# STEP_END
# STEP_START playbook-faq-publish
-iris --json agent-playbook faqs get "$FAQ_ID" --version "$VERSION" | jq .content
+iris --json agent-playbooks faqs get "$FAQ_ID" --version "$VERSION" | jq .content
# STEP_END
# STEP_START playbook-faq-publication
-iris agent-playbook faqs publish "$FAQ_ID" --version "$VERSION"
+iris agent-playbooks faqs publish "$FAQ_ID" --version "$VERSION"
# STEP_END
# STEP_START playbook-faq-search
@@ -40,29 +40,29 @@ cat > search.json <<'JSON'
"limit": 5
}
JSON
-iris --json agent-playbook faqs search --input search.json | jq .matches
+iris --json agent-playbooks faqs search --input search.json | jq .matches
# STEP_END
# STEP_START playbook-faq-update
jq '.answer += " Support can check the current stage but cannot guarantee a bank posting date."' \
faq.json > faq-update.json
-iris --json agent-playbook faqs push faq-update.json > faq-updated.json
+iris --json agent-playbooks faqs push faq-update.json > faq-updated.json
UPDATED_VERSION=$(jq -er '.results[0].version' faq-updated.json)
-iris --json agent-playbook faqs get "$FAQ_ID" --version "$UPDATED_VERSION" | jq .content
+iris --json agent-playbooks faqs get "$FAQ_ID" --version "$UPDATED_VERSION" | jq .content
# STEP_END
# STEP_START playbook-faq-republish
-iris agent-playbook faqs publish "$FAQ_ID" --version "$UPDATED_VERSION"
+iris agent-playbooks faqs publish "$FAQ_ID" --version "$UPDATED_VERSION"
# STEP_END
# STEP_START playbook-faq-rollback
-iris agent-playbook faqs publish "$FAQ_ID" --version "$VERSION"
+iris agent-playbooks faqs publish "$FAQ_ID" --version "$VERSION"
# STEP_END
# STEP_START playbook-faq-list
-iris --json agent-playbook faqs list --sort-by updatedAt --sort-order desc --page-size 50 | jq .
+iris --json agent-playbooks faqs list --sort-by updatedAt --sort-order desc --page-size 50 | jq .
# STEP_END
# STEP_START playbook-faq-history
-iris --json agent-playbook faqs versions "$FAQ_ID" --page-size 50 | jq .
+iris --json agent-playbooks faqs versions "$FAQ_ID" --page-size 50 | jq .
# STEP_END
diff --git a/local_examples/iris/playbooks/faqs/faqs.py b/local_examples/iris/playbooks/faqs/faqs.py
index a29e4b0c9c..e6ab4c648c 100644
--- a/local_examples/iris/playbooks/faqs/faqs.py
+++ b/local_examples/iris/playbooks/faqs/faqs.py
@@ -2,10 +2,10 @@
# HIDE_START
import os
-from redis_iris.agent_playbook import AgentPlaybook, AgentPlaybookSettings
+from redis_iris.agent_playbooks import AgentPlaybooks, AgentPlaybooksSettings
-playbook = AgentPlaybook(
- AgentPlaybookSettings(
+playbook = AgentPlaybooks(
+ AgentPlaybooksSettings(
url=os.environ["PLAYBOOK_URL"],
playbook_id=os.environ["PLAYBOOK_ID"],
api_key=os.environ["PLAYBOOK_API_KEY"],
diff --git a/local_examples/iris/playbooks/faqs/faqs_delete.cli.sh b/local_examples/iris/playbooks/faqs/faqs_delete.cli.sh
index a80a6187a5..7a73ce70db 100644
--- a/local_examples/iris/playbooks/faqs/faqs_delete.cli.sh
+++ b/local_examples/iris/playbooks/faqs/faqs_delete.cli.sh
@@ -1,11 +1,11 @@
# EXAMPLE: iris_playbook_faqs_delete
# HIDE_START
set -euo pipefail
-export IRIS_AGENT_PLAYBOOK_URL="$PLAYBOOK_URL"
-export IRIS_AGENT_PLAYBOOK_ID="$PLAYBOOK_ID"
-export IRIS_AGENT_PLAYBOOK_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
+export IRIS_AGENT_PLAYBOOKS_URL="$PLAYBOOK_URL"
+export IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID="$PLAYBOOK_ID"
+export IRIS_AGENT_PLAYBOOKS_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
# HIDE_END
# STEP_START playbook-faq-delete
-iris agent-playbook faqs delete "$PLAYBOOK_FAQ_ID" --yes
+iris agent-playbooks faqs delete "$PLAYBOOK_FAQ_ID" --yes
# STEP_END
diff --git a/local_examples/iris/playbooks/faqs/faqs_delete.py b/local_examples/iris/playbooks/faqs/faqs_delete.py
index 80830d9a50..d3d528713c 100644
--- a/local_examples/iris/playbooks/faqs/faqs_delete.py
+++ b/local_examples/iris/playbooks/faqs/faqs_delete.py
@@ -2,10 +2,10 @@
# HIDE_START
import os
-from redis_iris.agent_playbook import AgentPlaybook, AgentPlaybookSettings
+from redis_iris.agent_playbooks import AgentPlaybooks, AgentPlaybooksSettings
-playbook = AgentPlaybook(
- AgentPlaybookSettings(
+playbook = AgentPlaybooks(
+ AgentPlaybooksSettings(
url=os.environ["PLAYBOOK_URL"],
playbook_id=os.environ["PLAYBOOK_ID"],
api_key=os.environ["PLAYBOOK_API_KEY"],
diff --git a/local_examples/iris/playbooks/faqs/faqs_withdraw.cli.sh b/local_examples/iris/playbooks/faqs/faqs_withdraw.cli.sh
index 9f3ba6c41a..3b6e0f2fa5 100644
--- a/local_examples/iris/playbooks/faqs/faqs_withdraw.cli.sh
+++ b/local_examples/iris/playbooks/faqs/faqs_withdraw.cli.sh
@@ -1,11 +1,11 @@
# EXAMPLE: iris_playbook_faqs_withdraw
# HIDE_START
set -euo pipefail
-export IRIS_AGENT_PLAYBOOK_URL="$PLAYBOOK_URL"
-export IRIS_AGENT_PLAYBOOK_ID="$PLAYBOOK_ID"
-export IRIS_AGENT_PLAYBOOK_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
+export IRIS_AGENT_PLAYBOOKS_URL="$PLAYBOOK_URL"
+export IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID="$PLAYBOOK_ID"
+export IRIS_AGENT_PLAYBOOKS_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
# HIDE_END
# STEP_START playbook-faq-withdraw
-iris agent-playbook faqs withdraw "$PLAYBOOK_FAQ_ID"
+iris agent-playbooks faqs withdraw "$PLAYBOOK_FAQ_ID"
# STEP_END
diff --git a/local_examples/iris/playbooks/faqs/faqs_withdraw.py b/local_examples/iris/playbooks/faqs/faqs_withdraw.py
index 3bb8079481..376fc0ce53 100644
--- a/local_examples/iris/playbooks/faqs/faqs_withdraw.py
+++ b/local_examples/iris/playbooks/faqs/faqs_withdraw.py
@@ -2,10 +2,10 @@
# HIDE_START
import os
-from redis_iris.agent_playbook import AgentPlaybook, AgentPlaybookSettings
+from redis_iris.agent_playbooks import AgentPlaybooks, AgentPlaybooksSettings
-playbook = AgentPlaybook(
- AgentPlaybookSettings(
+playbook = AgentPlaybooks(
+ AgentPlaybooksSettings(
url=os.environ["PLAYBOOK_URL"],
playbook_id=os.environ["PLAYBOOK_ID"],
api_key=os.environ["PLAYBOOK_API_KEY"],
diff --git a/local_examples/iris/playbooks/langgraph_agent/langgraph_agent.mts b/local_examples/iris/playbooks/langgraph_agent/langgraph_agent.mts
index 4dcf3fae90..ac67b6e168 100644
--- a/local_examples/iris/playbooks/langgraph_agent/langgraph_agent.mts
+++ b/local_examples/iris/playbooks/langgraph_agent/langgraph_agent.mts
@@ -36,7 +36,7 @@ async function main() {
});
async function discover(state: typeof Turn.State) {
const context = await playbook.discoverEntries({ query: state.task, limit: 3 }).catch(error => {
- throw new Error("Playbook discovery failed; no model call was made.", { cause: error });
+ throw new Error("Agent Playbooks discovery failed; no model call was made.", { cause: error });
});
if (!context.pinnedEntries.length && !context.discoveredEntries.length) {
return { context: "", reply: context.budgetTruncated
diff --git a/local_examples/iris/playbooks/langgraph_agent/langgraph_agent.py b/local_examples/iris/playbooks/langgraph_agent/langgraph_agent.py
index 1fc3114647..6716b600a1 100644
--- a/local_examples/iris/playbooks/langgraph_agent/langgraph_agent.py
+++ b/local_examples/iris/playbooks/langgraph_agent/langgraph_agent.py
@@ -11,7 +11,7 @@
from langchain.messages import ToolMessage
from langchain_openai import ChatOpenAI
from langgraph.graph import END, START, StateGraph
-from redis_iris.agent_playbook import AgentPlaybook, AgentPlaybookSettings
+from redis_iris.agent_playbooks import AgentPlaybooks, AgentPlaybooksSettings
TASK = os.environ.get(
"AGENT_TASK", "Draft a reply to a customer whose refund status shows Processing."
@@ -39,8 +39,8 @@ async def main():
url = os.environ["PLAYBOOK_URL"].rstrip("/")
playbook_id = os.environ["PLAYBOOK_ID"]
api_key = os.environ["PLAYBOOK_API_KEY"]
- async with AgentPlaybook(
- AgentPlaybookSettings(
+ async with AgentPlaybooks(
+ AgentPlaybooksSettings(
url=url, playbook_id=playbook_id, api_key=api_key
)
) as playbook:
@@ -49,7 +49,7 @@ async def discover(state: Turn):
try:
context = await playbook.client.discover_entries_async(query=state["task"], limit=3)
except Exception as error:
- raise RuntimeError("Playbook discovery failed; no model call was made.") from error
+ raise RuntimeError("Agent Playbooks discovery failed; no model call was made.") from error
if not context.pinned_entries and not context.discovered_entries:
return {
"context": "",
diff --git a/local_examples/iris/playbooks/limits/limits.py b/local_examples/iris/playbooks/limits/limits.py
index fe825ed4fb..0924518e1f 100644
--- a/local_examples/iris/playbooks/limits/limits.py
+++ b/local_examples/iris/playbooks/limits/limits.py
@@ -2,10 +2,10 @@
# HIDE_START
import os
-from redis_iris.agent_playbook import AgentPlaybook, AgentPlaybookSettings
+from redis_iris.agent_playbooks import AgentPlaybooks, AgentPlaybooksSettings
-playbook = AgentPlaybook(
- AgentPlaybookSettings(
+playbook = AgentPlaybooks(
+ AgentPlaybooksSettings(
url=os.environ["PLAYBOOK_URL"],
playbook_id=os.environ["PLAYBOOK_ID"],
api_key=os.environ["PLAYBOOK_API_KEY"],
diff --git a/local_examples/iris/playbooks/openai_agent/openai_agent.mts b/local_examples/iris/playbooks/openai_agent/openai_agent.mts
index 8bdcaf4c26..93f5839d0f 100644
--- a/local_examples/iris/playbooks/openai_agent/openai_agent.mts
+++ b/local_examples/iris/playbooks/openai_agent/openai_agent.mts
@@ -29,7 +29,7 @@ async function main() {
serverURL: url, playbookId, apiKey, retryConfig: { strategy: "none" },
});
const context = await playbook.discoverEntries({ query: TASK, limit: 3 }).catch(error => {
- throw new Error("Playbook discovery failed; no model call was made.", { cause: error });
+ throw new Error("Agent Playbooks discovery failed; no model call was made.", { cause: error });
});
if (!context.pinnedEntries.length && !context.discoveredEntries.length) {
console.log(context.budgetTruncated
diff --git a/local_examples/iris/playbooks/openai_agent/openai_agent.py b/local_examples/iris/playbooks/openai_agent/openai_agent.py
index e0c3fcdfff..d9b8833aef 100644
--- a/local_examples/iris/playbooks/openai_agent/openai_agent.py
+++ b/local_examples/iris/playbooks/openai_agent/openai_agent.py
@@ -5,7 +5,7 @@
from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp
-from redis_iris.agent_playbook import AgentPlaybook, AgentPlaybookSettings
+from redis_iris.agent_playbooks import AgentPlaybooks, AgentPlaybooksSettings
TASK = os.environ.get(
"AGENT_TASK", "Draft a reply to a customer whose refund status shows Processing."
@@ -27,15 +27,15 @@ async def main():
url = os.environ["PLAYBOOK_URL"].rstrip("/")
playbook_id = os.environ["PLAYBOOK_ID"]
api_key = os.environ["PLAYBOOK_API_KEY"]
- async with AgentPlaybook(
- AgentPlaybookSettings(
+ async with AgentPlaybooks(
+ AgentPlaybooksSettings(
url=url, playbook_id=playbook_id, api_key=api_key
)
) as playbook:
try:
context = await playbook.client.discover_entries_async(query=TASK, limit=3)
except Exception as error:
- raise RuntimeError("Playbook discovery failed; no model call was made.") from error
+ raise RuntimeError("Agent Playbooks discovery failed; no model call was made.") from error
if not context.pinned_entries and not context.discovered_entries:
print(
diff --git a/local_examples/iris/playbooks/proposals/proposals.cli.sh b/local_examples/iris/playbooks/proposals/proposals.cli.sh
index e04c87eacd..e4e219db56 100644
--- a/local_examples/iris/playbooks/proposals/proposals.cli.sh
+++ b/local_examples/iris/playbooks/proposals/proposals.cli.sh
@@ -1,19 +1,19 @@
# EXAMPLE: iris_playbook_proposals
# HIDE_START
set -euo pipefail
-export IRIS_AGENT_PLAYBOOK_URL="$PLAYBOOK_URL"
-export IRIS_AGENT_PLAYBOOK_ID="$PLAYBOOK_ID"
-export IRIS_AGENT_PLAYBOOK_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
-iris agent-playbook health
+export IRIS_AGENT_PLAYBOOKS_URL="$PLAYBOOK_URL"
+export IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID="$PLAYBOOK_ID"
+export IRIS_AGENT_PLAYBOOKS_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
+iris agent-playbooks health
# HIDE_END
# STEP_START playbook-proposal-inbox
-iris --json agent-playbook proposals list --view inbox --sort-by updatedAt --sort-order desc \
+iris --json agent-playbooks proposals list --view inbox --sort-by updatedAt --sort-order desc \
--page-size 50 | jq .
# STEP_END
# STEP_START playbook-proposal-search
-iris --json agent-playbook proposals search 'Contact support about a missing refund' \
+iris --json agent-playbooks proposals search 'Contact support about a missing refund' \
--minimum-score 0.7 --action-type add --entry-type faq --limit 5 | jq .matches
# STEP_END
@@ -32,7 +32,7 @@ cat > proposal-source.json <<'JSON'
"reference": {"documentId": "sample-refund-policy"}
}
JSON
-iris --json agent-playbook proposals create proposal-faq.json --source proposal-source.json > proposal-created.json
+iris --json agent-playbooks proposals create proposal-faq.json --source proposal-source.json > proposal-created.json
PROPOSAL_ID=$(jq -er '.proposalId' proposal-created.json)
jq '{proposalId, proposalRevision}' proposal-created.json
# STEP_END
@@ -50,11 +50,11 @@ jq -n --arg observedAt "$(date -u +%Y-%m-%dT%H:%M:%SZ)" '{
}
}
}' > evidence.json
-iris --json agent-playbook proposals evidence "$PROPOSAL_ID" "$EVIDENCE_ID" --input evidence.json | jq .disposition
+iris --json agent-playbooks proposals evidence "$PROPOSAL_ID" "$EVIDENCE_ID" --input evidence.json | jq .disposition
# STEP_END
# STEP_START playbook-proposal-read
-iris --json agent-playbook proposals get "$PROPOSAL_ID" > reviewed.json
+iris --json agent-playbooks proposals get "$PROPOSAL_ID" > reviewed.json
jq . reviewed.json
# STEP_END
@@ -75,37 +75,37 @@ if [[ -n "$ENTRY_KEY" ]]; then
jq --arg key "$ENTRY_KEY" '.entryKey = $key' proposal-update.json > proposal-keyed.json
mv proposal-keyed.json proposal-update.json
fi
-iris --json agent-playbook proposals replace "$PROPOSAL_ID" proposal-update.json \
+iris --json agent-playbooks proposals replace "$PROPOSAL_ID" proposal-update.json \
--expected-revision "$REVISION" > revised.json
jq '{proposalRevision, action}' revised.json
# STEP_END
# STEP_START playbook-proposal-trash
REVISION=$(jq -er '.proposalRevision' revised.json)
-iris agent-playbook proposals dismiss "$PROPOSAL_ID" --expected-revision "$REVISION"
-iris agent-playbook proposals restore "$PROPOSAL_ID"
+iris agent-playbooks proposals dismiss "$PROPOSAL_ID" --expected-revision "$REVISION"
+iris agent-playbooks proposals restore "$PROPOSAL_ID"
# To purge a trashed proposal instead of restoring it:
-# iris agent-playbook proposals purge "$PROPOSAL_ID" --yes
+# iris agent-playbooks proposals purge "$PROPOSAL_ID" --yes
# STEP_END
# STEP_START playbook-proposal-final-review
-iris --json agent-playbook proposals get "$PROPOSAL_ID" > final-review.json
+iris --json agent-playbooks proposals get "$PROPOSAL_ID" > final-review.json
jq '{action, evidence, proposalRevision}' final-review.json
# STEP_END
# STEP_START playbook-proposal-accept
REVISION=$(jq -er '.proposalRevision' final-review.json)
-iris --json agent-playbook proposals accept "$PROPOSAL_ID" --expected-revision "$REVISION" > accepted.json
+iris --json agent-playbooks proposals accept "$PROPOSAL_ID" --expected-revision "$REVISION" > accepted.json
ACCEPTED_FAQ_ID=$(jq -er '.result.versionCreated.entryId' accepted.json)
ACCEPTED_VERSION=$(jq -er '.result.versionCreated.version' accepted.json)
-iris --json agent-playbook faqs get "$ACCEPTED_FAQ_ID" --version "$ACCEPTED_VERSION" | jq '{entryId, version, content}'
+iris --json agent-playbooks faqs get "$ACCEPTED_FAQ_ID" --version "$ACCEPTED_VERSION" | jq '{entryId, version, content}'
# STEP_END
# STEP_START playbook-proposal-publish
-iris agent-playbook faqs publish "$ACCEPTED_FAQ_ID" --version "$ACCEPTED_VERSION"
+iris agent-playbooks faqs publish "$ACCEPTED_FAQ_ID" --version "$ACCEPTED_VERSION"
# STEP_END
# STEP_START playbook-proposal-history
-iris --json agent-playbook proposals list --view trash --sort-by updatedAt --sort-order desc \
+iris --json agent-playbooks proposals list --view trash --sort-by updatedAt --sort-order desc \
--page-size 50 | jq .
# STEP_END
diff --git a/local_examples/iris/playbooks/proposals/proposals.py b/local_examples/iris/playbooks/proposals/proposals.py
index 6b8496ebc6..26a7871159 100644
--- a/local_examples/iris/playbooks/proposals/proposals.py
+++ b/local_examples/iris/playbooks/proposals/proposals.py
@@ -2,10 +2,10 @@
# HIDE_START
import os
from redis_agent_playbook import models
-from redis_iris.agent_playbook import AgentPlaybook, AgentPlaybookSettings
+from redis_iris.agent_playbooks import AgentPlaybooks, AgentPlaybooksSettings
-playbook = AgentPlaybook(
- AgentPlaybookSettings(
+playbook = AgentPlaybooks(
+ AgentPlaybooksSettings(
url=os.environ["PLAYBOOK_URL"],
playbook_id=os.environ["PLAYBOOK_ID"],
api_key=os.environ["PLAYBOOK_API_KEY"],
diff --git a/local_examples/iris/playbooks/quickstart/quickstart.cli.sh b/local_examples/iris/playbooks/quickstart/quickstart.cli.sh
index 0ff8aaa3ea..64e32983cb 100644
--- a/local_examples/iris/playbooks/quickstart/quickstart.cli.sh
+++ b/local_examples/iris/playbooks/quickstart/quickstart.cli.sh
@@ -2,11 +2,11 @@
# STEP_START playbook-connect
set -euo pipefail
-export IRIS_AGENT_PLAYBOOK_URL="$PLAYBOOK_URL"
-export IRIS_AGENT_PLAYBOOK_ID="$PLAYBOOK_ID"
-export IRIS_AGENT_PLAYBOOK_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
+export IRIS_AGENT_PLAYBOOKS_URL="$PLAYBOOK_URL"
+export IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID="$PLAYBOOK_ID"
+export IRIS_AGENT_PLAYBOOKS_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
-iris agent-playbook health
+iris agent-playbooks health
# STEP_END
# STEP_START playbook-quickstart-create
@@ -19,19 +19,19 @@ cat > faq.json <<'JSON'
"attributes": {"locale": "en-US", "topic": "refund"}
}
JSON
-iris agent-playbook faqs validate faq.json
-iris --json agent-playbook faqs push faq.json > faq-draft.json
+iris agent-playbooks faqs validate faq.json
+iris --json agent-playbooks faqs push faq.json > faq-draft.json
FAQ_ID=$(jq -er '.results[0].entryId' faq-draft.json)
VERSION=$(jq -er '.results[0].version' faq-draft.json)
jq . faq-draft.json
# STEP_END
# STEP_START playbook-quickstart-publish
-iris --json agent-playbook faqs get "$FAQ_ID" --version "$VERSION" | jq .content
+iris --json agent-playbooks faqs get "$FAQ_ID" --version "$VERSION" | jq .content
# STEP_END
# STEP_START playbook-quickstart-publication
-iris agent-playbook faqs publish "$FAQ_ID" --version "$VERSION"
+iris agent-playbooks faqs publish "$FAQ_ID" --version "$VERSION"
# STEP_END
# STEP_START playbook-quickstart-search
@@ -42,7 +42,7 @@ cat > search.json <<'JSON'
"limit": 5
}
JSON
-iris --json agent-playbook faqs search --input search.json | jq .matches
+iris --json agent-playbooks faqs search --input search.json | jq .matches
# STEP_END
# STEP_START playbook-quickstart-discover
@@ -53,18 +53,18 @@ cat > discover.json <<'JSON'
"limit": 5
}
JSON
-iris --json agent-playbook discover --input discover.json | jq .
+iris --json agent-playbooks discover --input discover.json | jq .
# STEP_END
# STEP_START playbook-quickstart-update
jq '.answer += " Support can check the current stage but cannot guarantee a bank posting date."' \
faq.json > faq-update.json
-iris --json agent-playbook faqs push faq-update.json > faq-updated.json
+iris --json agent-playbooks faqs push faq-update.json > faq-updated.json
UPDATED_VERSION=$(jq -er '.results[0].version' faq-updated.json)
-iris --json agent-playbook faqs get "$FAQ_ID" --version "$UPDATED_VERSION" | jq .content
+iris --json agent-playbooks faqs get "$FAQ_ID" --version "$UPDATED_VERSION" | jq .content
# STEP_END
# STEP_START playbook-quickstart-republish
-iris agent-playbook faqs publish "$FAQ_ID" --version "$UPDATED_VERSION"
-iris --json agent-playbook faqs search --input search.json | jq .matches
+iris agent-playbooks faqs publish "$FAQ_ID" --version "$UPDATED_VERSION"
+iris --json agent-playbooks faqs search --input search.json | jq .matches
# STEP_END
diff --git a/local_examples/iris/playbooks/quickstart/quickstart.py b/local_examples/iris/playbooks/quickstart/quickstart.py
index 0f480208be..c6ab0f9097 100644
--- a/local_examples/iris/playbooks/quickstart/quickstart.py
+++ b/local_examples/iris/playbooks/quickstart/quickstart.py
@@ -2,10 +2,10 @@
# STEP_START playbook-connect
import os
-from redis_iris.agent_playbook import AgentPlaybook, AgentPlaybookSettings
+from redis_iris.agent_playbooks import AgentPlaybooks, AgentPlaybooksSettings
-playbook = AgentPlaybook(
- AgentPlaybookSettings(
+playbook = AgentPlaybooks(
+ AgentPlaybooksSettings(
url=os.environ["PLAYBOOK_URL"],
playbook_id=os.environ["PLAYBOOK_ID"],
api_key=os.environ["PLAYBOOK_API_KEY"],
diff --git a/local_examples/iris/playbooks/quickstart/quickstart_delete.cli.sh b/local_examples/iris/playbooks/quickstart/quickstart_delete.cli.sh
index 683489cb1c..e1f5317e4c 100644
--- a/local_examples/iris/playbooks/quickstart/quickstart_delete.cli.sh
+++ b/local_examples/iris/playbooks/quickstart/quickstart_delete.cli.sh
@@ -1,11 +1,11 @@
# EXAMPLE: iris_playbook_quickstart_delete
# HIDE_START
set -euo pipefail
-export IRIS_AGENT_PLAYBOOK_URL="$PLAYBOOK_URL"
-export IRIS_AGENT_PLAYBOOK_ID="$PLAYBOOK_ID"
-export IRIS_AGENT_PLAYBOOK_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
+export IRIS_AGENT_PLAYBOOKS_URL="$PLAYBOOK_URL"
+export IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID="$PLAYBOOK_ID"
+export IRIS_AGENT_PLAYBOOKS_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
# HIDE_END
# STEP_START playbook-quickstart-delete
-iris agent-playbook faqs delete "$PLAYBOOK_FAQ_ID" --yes
+iris agent-playbooks faqs delete "$PLAYBOOK_FAQ_ID" --yes
# STEP_END
diff --git a/local_examples/iris/playbooks/quickstart/quickstart_delete.py b/local_examples/iris/playbooks/quickstart/quickstart_delete.py
index ca1b616ee1..e92559dc30 100644
--- a/local_examples/iris/playbooks/quickstart/quickstart_delete.py
+++ b/local_examples/iris/playbooks/quickstart/quickstart_delete.py
@@ -2,10 +2,10 @@
# HIDE_START
import os
-from redis_iris.agent_playbook import AgentPlaybook, AgentPlaybookSettings
+from redis_iris.agent_playbooks import AgentPlaybooks, AgentPlaybooksSettings
-playbook = AgentPlaybook(
- AgentPlaybookSettings(
+playbook = AgentPlaybooks(
+ AgentPlaybooksSettings(
url=os.environ["PLAYBOOK_URL"],
playbook_id=os.environ["PLAYBOOK_ID"],
api_key=os.environ["PLAYBOOK_API_KEY"],
diff --git a/local_examples/iris/playbooks/retrieval/retrieval.cli.sh b/local_examples/iris/playbooks/retrieval/retrieval.cli.sh
index 72062a522b..8e8142ab2c 100644
--- a/local_examples/iris/playbooks/retrieval/retrieval.cli.sh
+++ b/local_examples/iris/playbooks/retrieval/retrieval.cli.sh
@@ -1,10 +1,10 @@
# EXAMPLE: iris_playbook_retrieval
# HIDE_START
set -euo pipefail
-export IRIS_AGENT_PLAYBOOK_URL="$PLAYBOOK_URL"
-export IRIS_AGENT_PLAYBOOK_ID="$PLAYBOOK_ID"
-export IRIS_AGENT_PLAYBOOK_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
-iris agent-playbook health
+export IRIS_AGENT_PLAYBOOKS_URL="$PLAYBOOK_URL"
+export IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID="$PLAYBOOK_ID"
+export IRIS_AGENT_PLAYBOOKS_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
+iris agent-playbooks health
# HIDE_END
# STEP_START playbook-retrieval-discover
@@ -14,7 +14,7 @@ cat > discover.json <<'JSON'
"limit": 5
}
JSON
-iris --json agent-playbook discover --input discover.json | jq .
+iris --json agent-playbooks discover --input discover.json | jq .
# STEP_END
# STEP_START playbook-retrieval-pin
@@ -23,7 +23,7 @@ jq -n --arg id "$PLAYBOOK_SKILL_ID" '{
pinnedEntries: [{entryId: $id}],
limit: 5
}' > pinned-discover.json
-iris --json agent-playbook discover --input pinned-discover.json > pinned.json
+iris --json agent-playbooks discover --input pinned-discover.json > pinned.json
jq '.pinnedEntries[0] | {entryId, version}' pinned.json
# STEP_END
@@ -32,12 +32,12 @@ jq '{truncated, budgetTruncated: (.budgetTruncated // false)}' pinned.json
# STEP_END
# STEP_START playbook-retrieval-search
-iris --json agent-playbook faqs search 'Where is my refund?' --limit 5 | jq .
-iris --json agent-playbook skills search 'Draft a reply about a reported refund stage' --limit 5 | jq .
+iris --json agent-playbooks faqs search 'Where is my refund?' --limit 5 | jq .
+iris --json agent-playbooks skills search 'Draft a reply about a reported refund stage' --limit 5 | jq .
# STEP_END
# STEP_START playbook-retrieval-threshold
-iris --json agent-playbook faqs search 'Where is my refund?' --minimum-score 0.75 --limit 3 | jq .matches
+iris --json agent-playbooks faqs search 'Where is my refund?' --minimum-score 0.75 --limit 3 | jq .matches
# STEP_END
# STEP_START playbook-retrieval-filter
@@ -52,5 +52,5 @@ cat > filtered-search.json <<'JSON'
}
}
JSON
-iris --json agent-playbook faqs search --input filtered-search.json | jq .
+iris --json agent-playbooks faqs search --input filtered-search.json | jq .
# STEP_END
diff --git a/local_examples/iris/playbooks/retrieval/retrieval.py b/local_examples/iris/playbooks/retrieval/retrieval.py
index 51f26fb7aa..3c400378e6 100644
--- a/local_examples/iris/playbooks/retrieval/retrieval.py
+++ b/local_examples/iris/playbooks/retrieval/retrieval.py
@@ -2,10 +2,10 @@
# HIDE_START
import os
-from redis_iris.agent_playbook import AgentPlaybook, AgentPlaybookSettings
+from redis_iris.agent_playbooks import AgentPlaybooks, AgentPlaybooksSettings
-playbook = AgentPlaybook(
- AgentPlaybookSettings(
+playbook = AgentPlaybooks(
+ AgentPlaybooksSettings(
url=os.environ["PLAYBOOK_URL"],
playbook_id=os.environ["PLAYBOOK_ID"],
api_key=os.environ["PLAYBOOK_API_KEY"],
diff --git a/local_examples/iris/playbooks/skills/skills.cli.sh b/local_examples/iris/playbooks/skills/skills.cli.sh
index a3c2c1731b..4ebc563954 100644
--- a/local_examples/iris/playbooks/skills/skills.cli.sh
+++ b/local_examples/iris/playbooks/skills/skills.cli.sh
@@ -1,10 +1,10 @@
# EXAMPLE: iris_playbook_skills
# HIDE_START
set -euo pipefail
-export IRIS_AGENT_PLAYBOOK_URL="$PLAYBOOK_URL"
-export IRIS_AGENT_PLAYBOOK_ID="$PLAYBOOK_ID"
-export IRIS_AGENT_PLAYBOOK_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
-iris agent-playbook health
+export IRIS_AGENT_PLAYBOOKS_URL="$PLAYBOOK_URL"
+export IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID="$PLAYBOOK_ID"
+export IRIS_AGENT_PLAYBOOKS_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
+iris agent-playbooks health
# HIDE_END
# STEP_START playbook-skill-create
@@ -14,46 +14,46 @@ cat > refund-support-reply/.iris-playbook.json <<'JSON'
"attributes": {"locale": "en-US", "topic": "refund"}
}
JSON
-iris agent-playbook skills validate refund-support-reply
-iris --json agent-playbook skills push refund-support-reply > skill-draft.json
+iris agent-playbooks skills validate refund-support-reply
+iris --json agent-playbooks skills push refund-support-reply > skill-draft.json
SKILL_ID=$(jq -er '.results[0].entryId' skill-draft.json)
SKILL_VERSION=$(jq -er '.results[0].version' skill-draft.json)
jq . skill-draft.json
# STEP_END
# STEP_START playbook-skill-review
-iris --json agent-playbook skills get "$SKILL_ID" --version "$SKILL_VERSION" | jq .content
+iris --json agent-playbooks skills get "$SKILL_ID" --version "$SKILL_VERSION" | jq .content
# STEP_END
# STEP_START playbook-skill-publish
-iris agent-playbook skills publish "$SKILL_ID" --version "$SKILL_VERSION"
+iris agent-playbooks skills publish "$SKILL_ID" --version "$SKILL_VERSION"
# STEP_END
# STEP_START playbook-skill-append
jq '.attributes.channel = "chat"' refund-support-reply/.iris-playbook.json > skill-context.json
mv skill-context.json refund-support-reply/.iris-playbook.json
-iris --json agent-playbook skills push refund-support-reply > skill-updated.json
+iris --json agent-playbooks skills push refund-support-reply > skill-updated.json
UPDATED_VERSION=$(jq -er '.results[0].version' skill-updated.json)
-iris --json agent-playbook skills get "$SKILL_ID" --version "$UPDATED_VERSION" | jq .content
+iris --json agent-playbooks skills get "$SKILL_ID" --version "$UPDATED_VERSION" | jq .content
# STEP_END
# STEP_START playbook-skill-load
-iris --json agent-playbook skills get "$SKILL_ID" --version "$SKILL_VERSION" > selected-skill.json
+iris --json agent-playbooks skills get "$SKILL_ID" --version "$SKILL_VERSION" > selected-skill.json
jq -r '.content.payload.skill.instructions' selected-skill.json
-iris agent-playbook skills resource get "$SKILL_ID" references/reply-template.md \
+iris agent-playbooks skills resource get "$SKILL_ID" references/reply-template.md \
--version "$SKILL_VERSION" --output reply-template.txt --force
cat reply-template.txt
# STEP_END
# STEP_START playbook-skill-list
-iris --json agent-playbook skills list --sort-by updatedAt --sort-order desc --page-size 50 | jq .
+iris --json agent-playbooks skills list --sort-by updatedAt --sort-order desc --page-size 50 | jq .
# STEP_END
# STEP_START playbook-skill-state
-iris --json agent-playbook skills list --sort-by updatedAt --sort-order desc --page-size 50 \
+iris --json agent-playbooks skills list --sort-by updatedAt --sort-order desc --page-size 50 \
| jq --arg id "$SKILL_ID" '.[] | select(.entryId == $id)'
# STEP_END
# STEP_START playbook-skill-history
-iris --json agent-playbook skills versions "$SKILL_ID" --page-size 50 | jq .
+iris --json agent-playbooks skills versions "$SKILL_ID" --page-size 50 | jq .
# STEP_END
diff --git a/local_examples/iris/playbooks/skills/skills.py b/local_examples/iris/playbooks/skills/skills.py
index ca2bc628da..0b4547d34b 100644
--- a/local_examples/iris/playbooks/skills/skills.py
+++ b/local_examples/iris/playbooks/skills/skills.py
@@ -2,10 +2,10 @@
# HIDE_START
import os
-from redis_iris.agent_playbook import AgentPlaybook, AgentPlaybookSettings
+from redis_iris.agent_playbooks import AgentPlaybooks, AgentPlaybooksSettings
-playbook = AgentPlaybook(
- AgentPlaybookSettings(
+playbook = AgentPlaybooks(
+ AgentPlaybooksSettings(
url=os.environ["PLAYBOOK_URL"],
playbook_id=os.environ["PLAYBOOK_ID"],
api_key=os.environ["PLAYBOOK_API_KEY"],
diff --git a/local_examples/iris/playbooks/skills/skills_delete.cli.sh b/local_examples/iris/playbooks/skills/skills_delete.cli.sh
index 065a24bbd9..ad075b6fd3 100644
--- a/local_examples/iris/playbooks/skills/skills_delete.cli.sh
+++ b/local_examples/iris/playbooks/skills/skills_delete.cli.sh
@@ -1,11 +1,11 @@
# EXAMPLE: iris_playbook_skills_delete
# HIDE_START
set -euo pipefail
-export IRIS_AGENT_PLAYBOOK_URL="$PLAYBOOK_URL"
-export IRIS_AGENT_PLAYBOOK_ID="$PLAYBOOK_ID"
-export IRIS_AGENT_PLAYBOOK_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
+export IRIS_AGENT_PLAYBOOKS_URL="$PLAYBOOK_URL"
+export IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID="$PLAYBOOK_ID"
+export IRIS_AGENT_PLAYBOOKS_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
# HIDE_END
# STEP_START playbook-skill-delete
-iris agent-playbook skills delete "$PLAYBOOK_SKILL_ID" --yes
+iris agent-playbooks skills delete "$PLAYBOOK_SKILL_ID" --yes
# STEP_END
diff --git a/local_examples/iris/playbooks/skills/skills_delete.py b/local_examples/iris/playbooks/skills/skills_delete.py
index 77001bcf0c..dcb0de06b6 100644
--- a/local_examples/iris/playbooks/skills/skills_delete.py
+++ b/local_examples/iris/playbooks/skills/skills_delete.py
@@ -2,10 +2,10 @@
# HIDE_START
import os
-from redis_iris.agent_playbook import AgentPlaybook, AgentPlaybookSettings
+from redis_iris.agent_playbooks import AgentPlaybooks, AgentPlaybooksSettings
-playbook = AgentPlaybook(
- AgentPlaybookSettings(
+playbook = AgentPlaybooks(
+ AgentPlaybooksSettings(
url=os.environ["PLAYBOOK_URL"],
playbook_id=os.environ["PLAYBOOK_ID"],
api_key=os.environ["PLAYBOOK_API_KEY"],
diff --git a/local_examples/iris/playbooks/skills/skills_withdraw.cli.sh b/local_examples/iris/playbooks/skills/skills_withdraw.cli.sh
index 7ccd5450a5..aada78f4c5 100644
--- a/local_examples/iris/playbooks/skills/skills_withdraw.cli.sh
+++ b/local_examples/iris/playbooks/skills/skills_withdraw.cli.sh
@@ -1,11 +1,11 @@
# EXAMPLE: iris_playbook_skills_withdraw
# HIDE_START
set -euo pipefail
-export IRIS_AGENT_PLAYBOOK_URL="$PLAYBOOK_URL"
-export IRIS_AGENT_PLAYBOOK_ID="$PLAYBOOK_ID"
-export IRIS_AGENT_PLAYBOOK_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
+export IRIS_AGENT_PLAYBOOKS_URL="$PLAYBOOK_URL"
+export IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID="$PLAYBOOK_ID"
+export IRIS_AGENT_PLAYBOOKS_CONTENT_API_KEY="$PLAYBOOK_API_KEY"
# HIDE_END
# STEP_START playbook-skill-withdraw
-iris agent-playbook skills withdraw "$PLAYBOOK_SKILL_ID"
+iris agent-playbooks skills withdraw "$PLAYBOOK_SKILL_ID"
# STEP_END
diff --git a/local_examples/iris/playbooks/skills/skills_withdraw.py b/local_examples/iris/playbooks/skills/skills_withdraw.py
index 57dd925917..c58add7652 100644
--- a/local_examples/iris/playbooks/skills/skills_withdraw.py
+++ b/local_examples/iris/playbooks/skills/skills_withdraw.py
@@ -2,10 +2,10 @@
# HIDE_START
import os
-from redis_iris.agent_playbook import AgentPlaybook, AgentPlaybookSettings
+from redis_iris.agent_playbooks import AgentPlaybooks, AgentPlaybooksSettings
-playbook = AgentPlaybook(
- AgentPlaybookSettings(
+playbook = AgentPlaybooks(
+ AgentPlaybooksSettings(
url=os.environ["PLAYBOOK_URL"],
playbook_id=os.environ["PLAYBOOK_ID"],
api_key=os.environ["PLAYBOOK_API_KEY"],
diff --git a/static/code/agent-templates/javascript/rag_agent.js b/static/code/agent-templates/javascript/rag_agent.js
index 4d9461a0c7..051cddac6e 100644
--- a/static/code/agent-templates/javascript/rag_agent.js
+++ b/static/code/agent-templates/javascript/rag_agent.js
@@ -118,7 +118,7 @@ const SAMPLE_DOCS = [
'answer when cosine similarity exceeds a configurable threshold to reduce LLM API costs. ' +
'Agent Memory offers two-tier persistent memory with a session layer for recent turns and ' +
'a long-term layer backed by vector search, available as a REST API and Python SDK. ' +
- 'Context Retriever exposes structured business data as governed tools that agents can ' +
+ 'Context Gateway exposes structured business data as governed tools that agents can ' +
'query reliably without writing custom retrieval logic. Data Integration keeps a Redis ' +
'Cloud database in sync with relational databases in near real time using Change Data ' +
'Capture, so agents always query fresh data.'
diff --git a/static/code/agent-templates/python/rag_agent.py b/static/code/agent-templates/python/rag_agent.py
index e91b7c2b5c..77e9dc28d4 100644
--- a/static/code/agent-templates/python/rag_agent.py
+++ b/static/code/agent-templates/python/rag_agent.py
@@ -155,7 +155,7 @@
'answer when cosine similarity exceeds a configurable threshold to reduce LLM API costs. '
'Agent Memory offers two-tier persistent memory with a session layer for recent turns and '
'a long-term layer backed by vector search, available as a REST API and Python SDK. '
- 'Context Retriever exposes structured business data as governed tools that agents can '
+ 'Context Gateway exposes structured business data as governed tools that agents can '
'query reliably without writing custom retrieval logic. Data Integration keeps a Redis '
'Cloud database in sync with relational databases in near real time using Change Data '
'Capture, so agents always query fresh data.'
diff --git a/static/images/ai/context-engine/context-retriever-layer.svg b/static/images/ai/context-engine/context-retriever-layer.svg
deleted file mode 100644
index f25751f59a..0000000000
--- a/static/images/ai/context-engine/context-retriever-layer.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/static/images/ai/context-engine/lens-turn.svg b/static/images/ai/context-engine/lens-turn.svg
index 7d9d7d80a4..591b175721 100644
--- a/static/images/ai/context-engine/lens-turn.svg
+++ b/static/images/ai/context-engine/lens-turn.svg
@@ -1,6 +1,6 @@
' + n + "";
}
- /* Pretty JSON with light syntax colouring (same as the Context Retriever demo). */
+ /* Pretty JSON with light syntax colouring. */
function jsonHtml(v) {
var s = JSON.stringify(v, null, 2);
return esc(s).replace(/("(?:[^&]|&(?!quot;))*?")(\s*:)?|\b(true|false|null)\b|(-?\d+(?:\.\d+)?)/g,
@@ -481,11 +481,11 @@
return [s1Gone ? "The assistant found Thursday's order in long-term memory, even though the session it came from is gone." :
"The assistant found Thursday's order in long-term memory, without reading the Thursday session.",
allergyNote(plan, mems),
- "Placing the order again would go through the app's own data, for example through Context Retriever."];
+ "Placing the order again would go through the app's own data, for example through Context Gateway."];
}
return ["Maya didn't repeat any of her preferences. The assistant knows them because it searched long-term memory before it replied.",
allergyNote(plan, mems),
- "The restaurant suggestion comes from the app's own data, for example through Context Retriever."];
+ "The restaurant suggestion comes from the app's own data, for example through Context Gateway."];
}
/* -------------------------------------------------------------------- UI */
diff --git a/static/js/iris-demo.js b/static/js/iris-demo.js
index d588e8adbf..c80afe5005 100644
--- a/static/js/iris-demo.js
+++ b/static/js/iris-demo.js
@@ -8,7 +8,7 @@
data enters through Data Integration (a change in PostgreSQL reaches
Redis), Maya asks the food delivery app's assistant to reorder last
week's curry within 30 minutes and asks about the delivery fee, then
- LangCache, Agent Memory, and Context Retriever each add one part of the
+ LangCache, Agent Memory, and Context Gateway each add one part of the
answer, and the model writes the reply. The last step takes one service
away and shows only the part of the reply it changes. Each step links
to that service's own demo, which covers it in depth; this page doesn't
@@ -68,11 +68,11 @@
/* In the order data flows through Iris: in through Data Integration, then the services the agent calls. */
var SERVICES = [
{ key: "rdi", name: "Data Integration", role: "Brings business data in from PostgreSQL and keeps it in sync" },
- { key: "retriever", name: "Context Retriever", role: "Gives the agent governed tools to read that data" },
+ { key: "retriever", name: "Context Gateway", role: "Gives the agent governed tools to read that data" },
{ key: "memory", name: "Agent Memory", role: "Remembers Maya across conversations" },
{ key: "cache", name: "LangCache", role: "Answers questions it has seen before" }
];
- var NAMES = { cache: "LangCache", memory: "Agent Memory", retriever: "Context Retriever", rdi: "Data Integration", model: "Model" };
+ var NAMES = { cache: "LangCache", memory: "Agent Memory", retriever: "Context Gateway", rdi: "Data Integration", model: "Model" };
/* Modelled timings (ms) and token counts. */
var MS = { cache: 41, memory: 190, tool: [74, 88, 81], answer: 1620, reply: 1480 };
var TOKENS = { answer: 61 };
@@ -146,7 +146,7 @@
return { method: "POST", path: "/session-memory/events", status: "201", request: request, response: { event: ev },
curl: curlRest("$AGENT_MEMORY_URL/v1/stores/$STORE_ID/session-memory/events", "$AGENT_MEMORY_API_KEY", request) };
}
- /* Context Retriever results carry a _retrieval stamp, with fields sorted (as the Context Retriever demo returns them). */
+ /* Context Gateway results carry a _retrieval stamp, with fields sorted (as the Context Gateway demo returns them). */
function stamp(rec) {
var out = { _retrieval: { source: SURFACE, retrieved_at: ASK_AT.replace("Z", ".318Z"), source_version: 1 } };
Object.keys(rec).sort().forEach(function (k) { out[k] = rec[k]; });
@@ -176,7 +176,7 @@
on: true, at: SYNC_AT,
sql: "UPDATE restaurants SET avg_delivery_min = 45 WHERE id = 'r209';",
text: "Lotus Thai's kitchen gets busy, and the app updates its delivery time in PostgreSQL. A second later, Data Integration has written the change to " +
- code("restaurant:r209") + ", through a job file that uses the key template Context Retriever reads.",
+ code("restaurant:r209") + ", through a job file that uses the key template Context Gateway reads.",
record: { opcode: "u", db: "fooddelivery", schema: "public", table: "restaurants", key: { id: "r209" }, after: lotusRow }
} : {
on: false, at: SYNC_AT,
@@ -217,7 +217,7 @@
calls: [toolCall(++n, "filter_order", { tag_conditions: [{ field: "customer_id", value: OWNER }, { field: "restaurant_id", value: BSK.id }] }, filterResult(PAD_THAI))] });
}
} else add({ phase: "retrieve", service: "retriever", off: true, title: "No tools to call",
- text: "Context Retriever is off, so the agent has no way to read restaurants or orders." + (on.rdi ? " Data Integration still keeps Redis up to date, but nothing reads it." : "") });
+ text: "Context Gateway is off, so the agent has no way to read restaurants or orders." + (on.rdi ? " Data Integration still keeps Redis up to date, but nothing reads it." : "") });
/* The reply, as segments credited to their source. */
var R = [];
@@ -289,7 +289,7 @@
retriever: { check: "time",
with: "Lotus Thai is taking about 45 minutes tonight, so it wouldn't arrive in time. Bangkok Street Kitchen can deliver in about 30 minutes",
without: "I can't check delivery times right now, so I can't promise it'll arrive within 30 minutes. Should I order it anyway?",
- why: "Without Context Retriever, the agent has no tools to read restaurants or orders. The data in Redis is fresh, but nothing reads it." },
+ why: "Without Context Gateway, the agent has no tools to read restaurants or orders. The data in Redis is fresh, but nothing reads it." },
memory: { check: "peanut",
with: "you've ordered their pad thai with tofu twice. Should I order that, extra spicy, with no peanuts or fish sauce?",
without: "you've ordered their pad thai with tofu twice. Should I order that?",
@@ -313,15 +313,15 @@
{ key: "memory", at: "18:24", title: "Agent Memory recalls last week", lit: ["memory", "redis", "agent"],
text: "This is a new conversation, but Agent Memory kept what the assistant learned from Maya last week. A search scoped to her returns the order she means and the food she can't eat.",
adds: [{ src: "memory", t: "Last week: extra spicy green curry from Lotus Thai" }, { src: "memory", t: "Allergic to peanuts, avoids fish sauce" }] },
- { key: "retriever", at: "18:24", title: "Context Retriever checks live data", lit: ["retriever", "redis", "agent"],
- text: "Context Retriever gives the agent governed tools for the restaurant and order data that Data Integration keeps in sync. Lotus Thai is too slow tonight, so the agent finds a Thai restaurant that can make it, and checks what Maya has ordered there.",
+ { key: "retriever", at: "18:24", title: "Context Gateway checks live data", lit: ["retriever", "redis", "agent"],
+ text: "Context Gateway gives the agent governed tools for the restaurant and order data that Data Integration keeps in sync. Lotus Thai is too slow tonight, so the agent finds a Thai restaurant that can make it, and checks what Maya has ordered there.",
adds: [{ src: "retriever", t: "Bangkok Street Kitchen: 30 minutes" }, { src: "retriever", t: "She's had their pad thai with tofu twice" }] },
{ key: "reply", at: "18:24", title: "The model writes one reply", lit: ["agent"],
text: "The model gets Maya's message and everything the agent gathered, and writes the reply. Each highlighted part came from a different service. Afterward, Agent Memory stores the conversation, so next time the assistant remembers tonight too." },
{ key: "whatif", title: "What if a service were missing?", lit: [],
text: "Pick a service to take away. Only the part of the reply it supplied changes." }
];
- var DEPTH = { rdi: "Data Integration", retriever: "Context Retriever", memory: "Agent Memory", cache: "LangCache" };
+ var DEPTH = { rdi: "Data Integration", retriever: "Context Gateway", memory: "Agent Memory", cache: "LangCache" };
/* ---- the PostgreSQL sample data, shown when the reader selects POSTGRES ----
The same rows as the RDI demo (rdi-demo.js), on the evening of this tour:
@@ -380,7 +380,7 @@
/* ---- the same rows in Redis, shown when the reader selects the Redis logo ----
Data Integration writes each row as a JSON document. Its job files give each table the key template
- Context Retriever reads ({table}:{id}), and the customers job leaves out email, as in the RDI demo. */
+ Context Gateway reads ({table}:{id}), and the customers job leaves out email, as in the RDI demo. */
function rdTable(t, prefix, drop) {
var keep = t.columns.map(function (c, i) { return i > 0 && drop.indexOf(c) < 0 ? i : -1; }).filter(function (i) { return i > 0; });
return { name: t.name, columns: ["key"].concat(keep.map(function (i) { return t.columns[i]; })),
@@ -391,7 +391,7 @@
var RD_NOTES = {
restaurants: "About a second after PostgreSQL changes, Data Integration writes Lotus Thai's new time to restaurant:r209.",
customers: "The Data Integration job leaves out email, so addresses never reach Redis.",
- orders: "Maya's past orders. Context Retriever's filter_order tool finds them by customer_id."
+ orders: "Maya's past orders. Context Gateway's filter_order tool finds them by customer_id."
};
/* The two data windows, and where to select each in the drawing: a button over the shape, and a ring on
the shape's own outline that pulses on the step where the data changes. `changed` is Lotus Thai's row. */
@@ -451,7 +451,7 @@
/* ---- Maya, the user, drawn in the diagram's own style ----
The drawing has no user, so the stage adds one: the agent's disc and
label box, moved to the empty lower right, with a person where the
- agent has a robot. Her link to the agent is the Context Retriever's pair
+ agent has a robot. Her link to the agent is the Context Gateway's pair
of arrows turned half a turn about the agent's disc; both discs look the
same that way round, so the arrows meet them as the drawing's do. The
link is lit on the steps she's part of. */
@@ -878,7 +878,7 @@
}
return f;
}
- var SOURCES = { rdi: "Data Integration", retriever: "Context Retriever", memory: "Agent Memory", cache: "LangCache" };
+ var SOURCES = { rdi: "Data Integration", retriever: "Context Gateway", memory: "Agent Memory", cache: "LangCache" };
/* The key comes first, styled like the parts of the reply, so the colors mean something before you read.
Pointing at a key or at a part of the reply shows only that service's parts; selecting a key keeps it so. */
function replyBubble(segments) {
diff --git a/static/js/rdi-demo.js b/static/js/rdi-demo.js
index 584d48f1d1..2f035aab03 100644
--- a/static/js/rdi-demo.js
+++ b/static/js/rdi-demo.js
@@ -343,8 +343,8 @@
function structureNote(structure) {
return structure === "json" ?
- "JSON keeps numbers as numbers, so a rating of 4.7 stays 4.7. Context Retriever reads JSON documents, so choose JSON if your agents use it." :
- "Hashes store every value as a string, so a rating of 4.7 is stored as " + code('"4.7"') + ". Context Retriever reads only JSON documents.";
+ "JSON keeps numbers as numbers, so a rating of 4.7 stays 4.7." :
+ "Hashes store every value as a string, so a rating of 4.7 is stored as " + code('"4.7"') + ".";
}
function syncNotes(st, S, done) {
if (!st.deployed) return ["RDI reads the tables you select and writes each row to Redis under its own key. Choose the default data structure, then deploy the pipeline.",
@@ -393,7 +393,7 @@
function jobNotes(st, S, done, L) {
var left = S.keys.filter(function (e) { return e.leftover; }).length;
if (!st.jobDeployed) return ["With no job file, every table gets default keys. A job file customizes one table. This one gives customers the key " +
- "pattern " + code("customer:{id}") + ", the key template the Context Retriever demo reads." +
+ "pattern " + code("customer:{id}") + ", the key template the Redis Iris demo reads." +
" It also removes the email column, so email addresses never reach Redis."];
var lastAction = st.actions[st.actions.length - 1];
if (!done) {
@@ -418,7 +418,7 @@
}
if (lastAction === "flush" || st.actions.length === ACTIONS.length) {
notes.push("Give restaurants and orders a job too, with keys like " + code("restaurant:{id}") + ", and " + (st.structure === "json" ?
- "the documents match the keys the Context Retriever demo reads." : "with JSON as the data structure, the documents match what the Context Retriever demo reads."));
+ "the documents match the keys the Redis Iris demo reads." : "with JSON as the data structure, the documents match what the Redis Iris demo reads."));
}
return notes;
}