From 14f9baa9a60da63ca2c0f9244b3a684d126a167d Mon Sep 17 00:00:00 2001 From: Robert Shelton Date: Mon, 26 Oct 2026 14:15:30 -0400 Subject: [PATCH 1/8] docs(iris): align Iris docs with the redis-iris SDK and CLI (MOD-20269) - Agent Memory Python quickstart and developer guide use redis-iris: AgentMemory.from_env(), IRIS_AGENT_MEMORY_* variables, Python 3.11+. - Drop the redis-iris==0.1.0a4 pins from the Agent Playbooks and Context Gateway quickstarts. - Agent Playbooks is the canonical name: redis_iris.agent_playbooks, AgentPlaybooks/AgentPlaybooksSettings, iris agent-playbooks, IRIS_AGENT_PLAYBOOKS_* variables, and the agent-playbooks URL slug. - Remove Context Retriever from banners, the interactive demos, the agent templates, and the outdated console screenshot. Co-Authored-By: Claude Opus 5.5 --- content/develop/ai/_index.md | 1 - content/develop/ai/context-engine/_index.md | 4 +-- .../_index.md | 24 ++++++------- .../agent-integration.md | 8 ++--- .../api-reference.md | 4 +-- .../api-reference/openapi.json | 0 .../concepts.md | 14 ++++---- .../limits.md | 12 +++---- .../manage-faqs.md | 10 +++--- .../manage-skills.md | 18 +++++----- .../mcp.md | 16 ++++----- .../proposals.md | 36 +++++++++---------- .../quickstart.md | 20 +++++------ .../retrieval.md | 18 +++++----- .../ai/context-engine/concepts/_index.md | 2 +- .../concepts/interactive-demo.md | 6 ++-- .../context-engine/concepts/request-flow.md | 2 +- .../context-gateway/quickstart.md | 6 ++-- content/operate/iris/_index.md | 5 +-- .../self-managed/configuration.md | 4 +-- layouts/shortcodes/iris-demo.html | 2 +- .../iris/playbooks/async/async_example.py | 6 ++-- .../iris/playbooks/faqs/faqs.cli.sh | 30 ++++++++-------- local_examples/iris/playbooks/faqs/faqs.py | 6 ++-- .../iris/playbooks/faqs/faqs_delete.cli.sh | 8 ++--- .../iris/playbooks/faqs/faqs_delete.py | 6 ++-- .../iris/playbooks/faqs/faqs_withdraw.cli.sh | 8 ++--- .../iris/playbooks/faqs/faqs_withdraw.py | 6 ++-- .../langgraph_agent/langgraph_agent.py | 6 ++-- .../iris/playbooks/limits/limits.py | 6 ++-- .../playbooks/openai_agent/openai_agent.py | 6 ++-- .../iris/playbooks/proposals/proposals.cli.sh | 36 +++++++++---------- .../iris/playbooks/proposals/proposals.py | 6 ++-- .../playbooks/quickstart/quickstart.cli.sh | 28 +++++++-------- .../iris/playbooks/quickstart/quickstart.py | 6 ++-- .../quickstart/quickstart_delete.cli.sh | 8 ++--- .../playbooks/quickstart/quickstart_delete.py | 6 ++-- .../iris/playbooks/retrieval/retrieval.cli.sh | 20 +++++------ .../iris/playbooks/retrieval/retrieval.py | 6 ++-- .../iris/playbooks/skills/skills.cli.sh | 30 ++++++++-------- .../iris/playbooks/skills/skills.py | 6 ++-- .../playbooks/skills/skills_delete.cli.sh | 8 ++--- .../iris/playbooks/skills/skills_delete.py | 6 ++-- .../playbooks/skills/skills_withdraw.cli.sh | 8 ++--- .../iris/playbooks/skills/skills_withdraw.py | 6 ++-- .../agent-templates/javascript/rag_agent.js | 2 +- .../code/agent-templates/python/rag_agent.py | 2 +- .../context-retriever-layer.svg | 1 - static/js/agent-memory-demo.js | 6 ++-- static/js/iris-demo.js | 28 +++++++-------- static/js/rdi-demo.js | 8 ++--- 51 files changed, 261 insertions(+), 266 deletions(-) rename content/develop/ai/context-engine/{agent-playbook => agent-playbooks}/_index.md (80%) rename content/develop/ai/context-engine/{agent-playbook => agent-playbooks}/agent-integration.md (86%) rename content/develop/ai/context-engine/{agent-playbook => agent-playbooks}/api-reference.md (56%) rename content/develop/ai/context-engine/{agent-playbook => agent-playbooks}/api-reference/openapi.json (100%) rename content/develop/ai/context-engine/{agent-playbook => agent-playbooks}/concepts.md (92%) rename content/develop/ai/context-engine/{agent-playbook => agent-playbooks}/limits.md (93%) rename content/develop/ai/context-engine/{agent-playbook => agent-playbooks}/manage-faqs.md (93%) rename content/develop/ai/context-engine/{agent-playbook => agent-playbooks}/manage-skills.md (89%) rename content/develop/ai/context-engine/{agent-playbook => agent-playbooks}/mcp.md (85%) rename content/develop/ai/context-engine/{agent-playbook => agent-playbooks}/proposals.md (83%) rename content/develop/ai/context-engine/{agent-playbook => agent-playbooks}/quickstart.md (79%) rename content/develop/ai/context-engine/{agent-playbook => agent-playbooks}/retrieval.md (88%) delete mode 100644 static/images/ai/context-engine/context-retriever-layer.svg 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/context-engine/_index.md b/content/develop/ai/context-engine/_index.md index ef97b98428..10ce17b11e 100644 --- a/content/develop/ai/context-engine/_index.md +++ b/content/develop/ai/context-engine/_index.md @@ -9,7 +9,7 @@ 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. +bannerText: Agent Memory is 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,7 +20,7 @@ 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" >}} 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. -![An application discovers published playbook context for a task before the model turn. During the turn, the agent can load skill instructions and files through MCP, then return its response.](/images/ai/context-engine/agent-playbook-session.svg) +![An application discovers published playbook context for a task before the model turn. During the turn, the agent can load skill instructions and files through MCP, then return its response.](/images/ai/context-engine/agent-playbooks-session.svg) {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. -![Creating an entry starts an unpublished version 1. Publishing version 1 makes it retrievable. Appending version 2 keeps version 1 published until you publish version 2. You can publish version 1 again to roll back, or withdraw the entry so agents retrieve nothing.](/images/ai/context-engine/agent-playbook-versions.svg) +![Creating an entry starts an unpublished version 1. Publishing version 1 makes it retrievable. Appending version 2 keeps version 1 published until you publish version 2. You can publish version 1 again to roll back, or withdraw the entry so agents retrieve nothing.](/images/ai/context-engine/agent-playbooks-versions.svg) {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. | -![Discovery returns FAQ answers and skill previews. Loading a selected skill adds its instructions to the context. Fetching a resource adds only the file needed for the task.](/images/ai/context-engine/agent-playbook-disclosure.svg) +![Discovery returns FAQ answers and skill previews. Loading a selected skill adds its instructions to the context. Fetching a resource adds only the file needed for the task.](/images/ai/context-engine/agent-playbooks-disclosure.svg) {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. -![A proposal enters the inbox with candidate content and evidence. Acceptance creates an unpublished FAQ, which publication serves to agents. Dismissal or inbox expiration moves the proposal to trash, where it can be restored before its retention deadline.](/images/ai/context-engine/agent-playbook-proposals.svg) +![A proposal enters the inbox with candidate content and evidence. Acceptance creates an unpublished FAQ, which publication serves to agents. Dismissal or inbox expiration moves the proposal to trash, where it can be restored before its retention deadline.](/images/ai/context-engine/agent-playbooks-proposals.svg) {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 79% rename from content/develop/ai/context-engine/agent-playbook/quickstart.md rename to content/develop/ai/context-engine/agent-playbooks/quickstart.md index 43009db423..f669c1fb2a 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. **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..6b451b9455 100644 --- a/content/develop/ai/context-engine/concepts/_index.md +++ b/content/develop/ai/context-engine/concepts/_index.md @@ -9,7 +9,7 @@ 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. +bannerText: Agent Memory is 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..2f3f7815a4 100644 --- a/content/develop/ai/context-engine/concepts/interactive-demo.md +++ b/content/develop/ai/context-engine/concepts/interactive-demo.md @@ -4,12 +4,12 @@ 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. +bannerText: Agent Memory is currently available in preview. Features and behavior are subject to change. aliases: - /develop/ai/context-engine/interactive-demo/ --- @@ -25,7 +25,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..fe94d499ab 100644 --- a/content/develop/ai/context-engine/concepts/request-flow.md +++ b/content/develop/ai/context-engine/concepts/request-flow.md @@ -9,7 +9,7 @@ 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. +bannerText: Agent Memory is 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..df999dec4f 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. - + **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/operate/iris/_index.md b/content/operate/iris/_index.md index 11cb775d07..8ad78d2166 100644 --- a/content/operate/iris/_index.md +++ b/content/operate/iris/_index.md @@ -9,14 +9,11 @@ categories: - iris hideListLinks: true weight: 45 -bannerText: Agent Memory and Context Retriever are currently available in preview. Features and behavior are subject to change. +bannerText: Agent Memory is 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. -![The Redis Iris overview page in the Redis Cloud console, with cards for Data Pipelines, Context Retriever, Agent Memory, and LangCache.](/images/rc/iris-overview.png) -{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/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/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.py b/local_examples/iris/playbooks/langgraph_agent/langgraph_agent.py index 1fc3114647..132966de75 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: 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.py b/local_examples/iris/playbooks/openai_agent/openai_agent.py index e0c3fcdfff..9a0e49a31a 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,8 +27,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: 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 @@ -

MCP tools

Agent

Context Retriever

Database

\ No newline at end of file diff --git a/static/js/agent-memory-demo.js b/static/js/agent-memory-demo.js index 7c655f09da..e3d89a386d 100644 --- a/static/js/agent-memory-demo.js +++ b/static/js/agent-memory-demo.js @@ -326,7 +326,7 @@ }).join("") + '' + 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; } From 3e0ac4bd60a9ca0bed815faaa2e64330561034ad Mon Sep 17 00:00:00 2001 From: Robert Shelton Date: Mon, 26 Oct 2026 14:42:18 -0400 Subject: [PATCH 2/8] docs(iris): drop preview wording from Iris product pages (MOD-20269) Iris products no longer use preview labels; only Lens and agent_mesh are labeled, as beta. Remove the Agent Memory and Iris-wide preview banners and prose, keeping the documented database limitations and the self-managed license requirement. LangCache and RDI status unchanged. Co-Authored-By: Claude Opus 5.5 --- content/develop/ai/agent-builder/agent-concepts.md | 2 +- content/develop/ai/context-engine/_index.md | 1 - content/develop/ai/context-engine/concepts/_index.md | 1 - content/develop/ai/context-engine/concepts/interactive-demo.md | 1 - content/develop/ai/context-engine/concepts/request-flow.md | 1 - content/embeds/rc-agent-memory-quickstart-prerequisites.md | 2 +- content/operate/iris/_index.md | 1 - content/operate/rc/context-engine/agent-memory/_index.md | 1 - 8 files changed, 2 insertions(+), 8 deletions(-) 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 10ce17b11e..33cbbfa7ee 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 is 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. diff --git a/content/develop/ai/context-engine/concepts/_index.md b/content/develop/ai/context-engine/concepts/_index.md index 6b451b9455..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 is 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 2f3f7815a4..26cf8445c3 100644 --- a/content/develop/ai/context-engine/concepts/interactive-demo.md +++ b/content/develop/ai/context-engine/concepts/interactive-demo.md @@ -9,7 +9,6 @@ hideListLinks: true linktitle: Interactive demo title: Redis Iris interactive demo weight: 10 -bannerText: Agent Memory is currently available in preview. Features and behavior are subject to change. aliases: - /develop/ai/context-engine/interactive-demo/ --- diff --git a/content/develop/ai/context-engine/concepts/request-flow.md b/content/develop/ai/context-engine/concepts/request-flow.md index fe94d499ab..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 is 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/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 8ad78d2166..fd0246a81c 100644 --- a/content/operate/iris/_index.md +++ b/content/operate/iris/_index.md @@ -9,7 +9,6 @@ categories: - iris hideListLinks: true weight: 45 -bannerText: Agent Memory is 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. 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/ --- From 57c951773e3be9ddc6ea2fb73901dbc86f7148f4 Mon Sep 17 00:00:00 2001 From: Robert Shelton Date: Mon, 26 Oct 2026 14:55:43 -0400 Subject: [PATCH 3/8] docs(iris): Lens is beta; use Agent Playbooks in Lens pages (MOD-20269) - Lens banner says beta, not preview, and the Lens AGENTS.md glossary now prescribes beta (only Lens and agent_mesh carry a status label). - Playbook discovery -> Agent Playbooks discovery in prose, alt text, and the turn diagram. Co-Authored-By: Claude Opus 5.5 --- content/develop/ai/context-engine/lens/AGENTS.md | 6 +++--- content/develop/ai/context-engine/lens/_index.md | 2 +- content/develop/ai/context-engine/lens/agent-integration.md | 2 +- content/develop/ai/context-engine/lens/concepts.md | 2 +- static/images/ai/context-engine/lens-turn.svg | 6 +++--- 5 files changed, 9 insertions(+), 9 deletions(-) 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. -![One turn shown as steps on a timeline. A memory recall and a Playbook discovery run at the same time. Prompt assembly uses 3 of the 4 recalled memories and drops 1. A model call, a Context Gateway tool call, and a second model call follow, and the turn ends with the outcome completed.](/images/ai/context-engine/lens-turn.svg) +![One turn shown as steps on a timeline. A memory recall and an Agent Playbooks discovery run at the same time. Prompt assembly uses 3 of the 4 recalled memories and drops 1. A model call, a Context Gateway tool call, and a second model call follow, and the turn ends with the outcome completed.](/images/ai/context-engine/lens-turn.svg) {width="700"} ## What a turn records 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 @@ One Lens turn as a timeline of steps, from memory recall to the outcome - One turn in a session, shown as steps on a timeline. A memory recall fetches 4 memories and Playbook discovery runs at the same time. Prompt assembly then uses 3 of the 4 memories and drops 1. A model call follows, then a Context Gateway tool call, then a second model call. The turn ends with the outcome completed. + One turn in a session, shown as steps on a timeline. A memory recall fetches 4 memories and Agent Playbooks discovery runs at the same time. Prompt assembly then uses 3 of the 4 memories and drops 1. A model call follows, then a Context Gateway tool call, then a second model call. The turn ends with the outcome completed. @@ -13,8 +13,8 @@ fetched 4 - Playbook discovery - runs in parallel + Agent Playbooks + discovery, runs in parallel Prompt assembly From 249a921a33e35dbdb0b919abc3ecd3353d28c392 Mon Sep 17 00:00:00 2001 From: Robert Shelton Date: Mon, 26 Oct 2026 17:14:13 -0400 Subject: [PATCH 4/8] docs(iris): use Agent Playbooks in sample error messages (MOD-20269) Co-Authored-By: Claude Opus 5.5 --- .../iris/playbooks/langgraph_agent/langgraph_agent.mts | 2 +- .../iris/playbooks/langgraph_agent/langgraph_agent.py | 2 +- local_examples/iris/playbooks/openai_agent/openai_agent.mts | 2 +- local_examples/iris/playbooks/openai_agent/openai_agent.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) 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 132966de75..6716b600a1 100644 --- a/local_examples/iris/playbooks/langgraph_agent/langgraph_agent.py +++ b/local_examples/iris/playbooks/langgraph_agent/langgraph_agent.py @@ -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/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 9a0e49a31a..d9b8833aef 100644 --- a/local_examples/iris/playbooks/openai_agent/openai_agent.py +++ b/local_examples/iris/playbooks/openai_agent/openai_agent.py @@ -35,7 +35,7 @@ async def main(): 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( From 6cd7e13fa402852adc3546b1567920a69fd056c7 Mon Sep 17 00:00:00 2001 From: Robert Shelton Date: Wed, 28 Oct 2026 13:25:55 -0400 Subject: [PATCH 5/8] docs(iris): add SDK and CLI setup page (MOD-20269) One page for getting started with redis-iris: install, the iris command shape, setup on Redis Cloud (console, .env, cloud profile, health check) and on a self-managed deployment (.env.admin, dry run, create --write-env, service check), the iris.toml profile keys and precedence, and attaching Redis Iris to a LangGraph graph or an ADK agent. Linked from the context-engine landing page. Co-Authored-By: Claude Opus 5.5 --- content/develop/ai/context-engine/_index.md | 1 + .../develop/ai/context-engine/sdk-and-cli.md | 173 ++++++++++++++++++ 2 files changed, 174 insertions(+) create mode 100644 content/develop/ai/context-engine/sdk-and-cli.md diff --git a/content/develop/ai/context-engine/_index.md b/content/develop/ai/context-engine/_index.md index 33cbbfa7ee..c17f16ce95 100644 --- a/content/develop/ai/context-engine/_index.md +++ b/content/develop/ai/context-engine/_index.md @@ -17,6 +17,7 @@ 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-iris-64-duotone.png" title="SDK and CLI setup" description="Install redis-iris, connect it to Redis Cloud or a self-managed deployment, and attach it to your agent" url="/develop/ai/context-engine/sdk-and-cli" >}} {{< 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-playbooks" >}} 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..5e6d6e1020 --- /dev/null +++ b/content/develop/ai/context-engine/sdk-and-cli.md @@ -0,0 +1,173 @@ +--- +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, and attach Redis Iris to an agent you already have. +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. + +## Install the SDK and CLI + +Both require Python 3.11 or later, and both are prereleases. + +```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: + +```text +iris [shared options] [arguments] [options] +``` + +For example, `iris --json --profile suite agent-playbooks faqs sync ./faqs --publish changed`. + +| 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. + +## Set up on Redis Cloud + +On Redis Cloud, the Redis Cloud console creates services and keys, and the CLI checks the connection. These steps use Agent Playbooks. + +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: + + ```text + IRIS_PROFILE=cloud + IRIS_CONFIG=./iris.toml + IRIS_AGENT_PLAYBOOKS_URL= + IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID= + IRIS_AGENT_PLAYBOOKS_API_KEY= + ``` + +1. Create `iris.toml` with a cloud profile: + + ```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`. + +On a cloud profile, `service create`, `service key`, and `service check` don't call the service. They stop with a `cloud_unsupported` error that lists the console steps for the same task. + +## 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. + +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`: + + ```text + 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. Context Gateway's `service create` has no dry run. + +## 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. + +## Attach Redis Iris to an agent you already have + +`attach` adds a service to an agent you already built, at the framework's own hook points, and returns the same object. Before the model runs, it adds the service's context to the prompt. After the reply, it records the turn. + +For LangGraph, install `redis-iris[langgraph]` and attach to the graph before you compile it: + +```python +from redis_iris import AgentMemory +from redis_iris.integrations.langgraph import attach + +memory = AgentMemory.from_env(assistant_id="support-bot") +app = attach(memory, graph).compile() +``` + +For Google Agent Development Kit (ADK), in `redis-iris` 0.1.0a9 and later, attach to the `LlmAgent`: + +```python +from redis_iris.integrations.adk import attach + +agent = attach(memory, LlmAgent(name="support", model="", instruction="")) +``` + +`attach` works with Agent Memory and Agent Playbooks, and with several services combined by `redis_iris.hooks.stack`. Context Gateway adds tools rather than context, so you pass its tools to your model yourself. Intent Router and Lens don't attach: call `router.match()` where your agent routes. On LangGraph, each run of an attached graph is already one Lens turn. Elsewhere, wrap each turn in `lens.turn()`. + +## 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) From ae24f7c3580572a93e3245e60d2dda903817d0b2 Mon Sep 17 00:00:00 2001 From: Robert Shelton Date: Wed, 28 Oct 2026 13:46:27 -0400 Subject: [PATCH 6/8] docs(iris): link the product quickstarts and the SDK and CLI setup page (MOD-20269) The product quickstarts stay the starting point. The Agent Playbooks, Context Gateway and Lens quickstarts link to the setup page for the profile and configuration they share, and the setup page links back to each quickstart. The setup tile moves after the product tiles on the landing page. Co-Authored-By: Claude Opus 5.5 --- content/develop/ai/context-engine/_index.md | 2 +- content/develop/ai/context-engine/agent-playbooks/quickstart.md | 2 +- content/develop/ai/context-engine/context-gateway/quickstart.md | 2 +- content/develop/ai/context-engine/lens/quickstart.md | 2 +- content/develop/ai/context-engine/sdk-and-cli.md | 2 ++ 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/content/develop/ai/context-engine/_index.md b/content/develop/ai/context-engine/_index.md index c17f16ce95..a41f70387e 100644 --- a/content/develop/ai/context-engine/_index.md +++ b/content/develop/ai/context-engine/_index.md @@ -17,11 +17,11 @@ 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-iris-64-duotone.png" title="SDK and CLI setup" description="Install redis-iris, connect it to Redis Cloud or a self-managed deployment, and attach it to your agent" url="/develop/ai/context-engine/sdk-and-cli" >}} {{< 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-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, connect it to Redis Cloud or a self-managed deployment, and attach it to your agent" url="/develop/ai/context-engine/sdk-and-cli" >}}
## What is Redis Iris? diff --git a/content/develop/ai/context-engine/agent-playbooks/quickstart.md b/content/develop/ai/context-engine/agent-playbooks/quickstart.md index f669c1fb2a..c5790b556c 100644 --- a/content/develop/ai/context-engine/agent-playbooks/quickstart.md +++ b/content/develop/ai/context-engine/agent-playbooks/quickstart.md @@ -19,7 +19,7 @@ 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 prereleases. 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** diff --git a/content/develop/ai/context-engine/context-gateway/quickstart.md b/content/develop/ai/context-engine/context-gateway/quickstart.md index df999dec4f..237d2f3de9 100644 --- a/content/develop/ai/context-engine/context-gateway/quickstart.md +++ b/content/develop/ai/context-engine/context-gateway/quickstart.md @@ -26,7 +26,7 @@ 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 prereleases. 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). diff --git a/content/develop/ai/context-engine/lens/quickstart.md b/content/develop/ai/context-engine/lens/quickstart.md index 9aae5c3db7..04c75fd9c8 100644 --- a/content/develop/ai/context-engine/lens/quickstart.md +++ b/content/develop/ai/context-engine/lens/quickstart.md @@ -21,7 +21,7 @@ Get these values from your administrator: - The Lens read endpoint, your instance ID, and a read key, for reading them 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 diff --git a/content/develop/ai/context-engine/sdk-and-cli.md b/content/develop/ai/context-engine/sdk-and-cli.md index 5e6d6e1020..2d77fd140f 100644 --- a/content/develop/ai/context-engine/sdk-and-cli.md +++ b/content/develop/ai/context-engine/sdk-and-cli.md @@ -13,6 +13,8 @@ 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, and both are prereleases. From 457448cdbd8be8ba7945e24eecff0d4d1b74a7f5 Mon Sep 17 00:00:00 2001 From: Robert Shelton Date: Thu, 29 Oct 2026 12:19:53 -0400 Subject: [PATCH 7/8] docs(iris): tighten the SDK and CLI setup page (MOD-20269) Drop the prerelease note, the cloud_unsupported paragraph, the Gateway dry-run exception and the attach section (link the redis-iris examples instead). Break down the command-shape example, mark iris.toml optional but recommended, link the console, the CLI reference, the Helm repo and the project setup examples, and highlight every code block. Co-Authored-By: Claude Opus 5.5 --- .../develop/ai/context-engine/sdk-and-cli.md | 64 ++++++++----------- 1 file changed, 27 insertions(+), 37 deletions(-) diff --git a/content/develop/ai/context-engine/sdk-and-cli.md b/content/develop/ai/context-engine/sdk-and-cli.md index 2d77fd140f..f4198d4773 100644 --- a/content/develop/ai/context-engine/sdk-and-cli.md +++ b/content/develop/ai/context-engine/sdk-and-cli.md @@ -4,7 +4,7 @@ categories: - docs - develop - ai -description: Install the redis-iris SDK and iris CLI, connect them to Redis Cloud or a self-managed deployment, and attach Redis Iris to an agent you already have. +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 @@ -17,7 +17,7 @@ Start with a service's quickstart: [Agent Memory](/content/develop/ai/context-en ## Install the SDK and CLI -Both require Python 3.11 or later, and both are prereleases. +Both require Python 3.11 or later. ```bash python -m pip install redis-iris # the SDK, in your project's virtual environment @@ -29,11 +29,23 @@ iris --version Every command has the same shape. Shared options go before the service name: -```text +```bash iris [shared options] [arguments] [options] ``` -For example, `iris --json --profile suite agent-playbooks faqs sync ./faqs --publish changed`. +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 | |---|---| @@ -45,23 +57,24 @@ For example, `iris --json --profile suite agent-playbooks faqs sync ./faqs --pub `--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 creates services and keys, and the CLI checks the connection. These steps use Agent Playbooks. +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: - ```text - IRIS_PROFILE=cloud - IRIS_CONFIG=./iris.toml + ```bash IRIS_AGENT_PLAYBOOKS_URL= IRIS_AGENT_PLAYBOOKS_PLAYBOOK_ID= IRIS_AGENT_PLAYBOOKS_API_KEY= ``` -1. Create `iris.toml` with a cloud profile: +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] @@ -80,12 +93,12 @@ On Redis Cloud, the Redis Cloud console creates services and keys, and the CLI c A working playbook reports `status: ready`. -On a cloud profile, `service create`, `service key`, and `service check` don't call the service. They stop with a `cloud_unsupported` error that lists the console steps for the same task. - ## 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 @@ -100,7 +113,7 @@ On a self-managed deployment, the CLI creates services and keys with your operat 1. Put the operator tokens in a `.env.admin` file. Keep them out of your agent's `.env`: - ```text + ```bash IRIS_CONFIG=./iris.toml IRIS_PROFILE=suite IRIS_AGENT_PLAYBOOKS_SERVICE_TOKEN= @@ -127,7 +140,7 @@ On a self-managed deployment, the CLI creates services and keys with your operat 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. Context Gateway's `service create` has no dry run. +Agent Memory, Context Gateway, and Intent Router follow the same steps with their own `service create` options. ## Configure profiles and credentials @@ -143,33 +156,10 @@ The CLI takes each setting from the first of these that sets it: a command optio `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. -## Attach Redis Iris to an agent you already have - -`attach` adds a service to an agent you already built, at the framework's own hook points, and returns the same object. Before the model runs, it adds the service's context to the prompt. After the reply, it records the turn. - -For LangGraph, install `redis-iris[langgraph]` and attach to the graph before you compile it: - -```python -from redis_iris import AgentMemory -from redis_iris.integrations.langgraph import attach - -memory = AgentMemory.from_env(assistant_id="support-bot") -app = attach(memory, graph).compile() -``` - -For Google Agent Development Kit (ADK), in `redis-iris` 0.1.0a9 and later, attach to the `LlmAgent`: - -```python -from redis_iris.integrations.adk import attach - -agent = attach(memory, LlmAgent(name="support", model="", instruction="")) -``` - -`attach` works with Agent Memory and Agent Playbooks, and with several services combined by `redis_iris.hooks.stack`. Context Gateway adds tools rather than context, so you pass its tools to your model yourself. Intent Router and Lens don't attach: call `router.match()` where your agent routes. On LangGraph, each run of an attached graph is already one Lens turn. Elsewhere, wrap each turn in `lens.turn()`. - ## 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 From ad0577e926cb0095eaa08edbfce7bbb009bbdaf9 Mon Sep 17 00:00:00 2001 From: Robert Shelton Date: Thu, 29 Oct 2026 12:41:11 -0400 Subject: [PATCH 8/8] docs(iris): point Lens at the Iris host for the unified Iris API (MOD-20269) redis-iris moves onto the unified Iris API (redis/redis-iris#74). Lens export and the read client both take the bare Iris host: the SDK adds /iris/data/v1beta1/lens/v1/traces, and reads live under /iris/data/v1beta1/lens/instances/{instanceId}. Require redis-agent-lens 0.1.0a4, the first read client on those routes, and update the cURL examples. Co-Authored-By: Claude Opus 5.5 --- content/develop/ai/context-engine/lens/configure.md | 4 ++-- .../develop/ai/context-engine/lens/quickstart.md | 13 +++++++------ content/develop/ai/context-engine/lens/read-api.md | 6 +++--- local_examples/iris/lens/quickstart/quickstart.sh | 2 +- local_examples/iris/lens/read_api/read_api.sh | 2 +- 5 files changed, 14 insertions(+), 13 deletions(-) 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 04c75fd9c8..53877e3b1a 100644 --- a/content/develop/ai/context-engine/lens/quickstart.md +++ b/content/develop/ai/context-engine/lens/quickstart.md @@ -17,8 +17,9 @@ 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. For the configuration `redis-iris` reads across services, see [SDK and CLI setup](/content/develop/ai/context-engine/sdk-and-cli.md). @@ -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/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