From 4358ea462d90c7f8ec9a342742020008daa46c1c Mon Sep 17 00:00:00 2001 From: Gwen Blum <19484478+gwenblum@users.noreply.github.com> Date: Wed, 26 Nov 2025 17:59:19 +0100 Subject: [PATCH 1/3] IQ: Update 101 suggest remediation --- .../README.md | 10 +- ...ediation Suggestion for User Endpoint.json | 235 +++++++++--------- .../image.png | Bin 0 -> 39577 bytes 3 files changed, 125 insertions(+), 120 deletions(-) create mode 100644 IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/image.png diff --git a/IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/README.md b/IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/README.md index 2269ddde..c6729a74 100644 --- a/IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/README.md +++ b/IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/README.md @@ -4,13 +4,15 @@ On-demand runbook that suggests remediations to run on a device based on the hea The runbook fetches health events for the request device, uses a first GenAI node to get an analysis of the events and suggested resolutions, then continues the GenAI conversation though a second genAI node to assess what remediation from the available remediations on the tenant would address the issues. -![image](https://github.com/user-attachments/assets/04e0d58b-a53b-4688-ab6d-e437b2e4a5c3) +![image](image.png) ## Prerequisistes -1. Aternity integration is installed and the connector is configured (IQ > Integration Library) -2. Remediations available in the Aternity tenant -3. IQ Assist feature is enabled (see help page) +1. Riverbed IQ Assist feature is enabled + +2. Aternity integration is installed and the connector is configured (IQ > Integration Library) + +3. Remediations available in the Aternity tenant ## Quick Setup diff --git a/IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/Riverbed IQ Assist - Diagnostic and Remediation Suggestion for User Endpoint.json b/IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/Riverbed IQ Assist - Diagnostic and Remediation Suggestion for User Endpoint.json index a7b1ddb7..26c4b7e0 100644 --- a/IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/Riverbed IQ Assist - Diagnostic and Remediation Suggestion for User Endpoint.json +++ b/IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/Riverbed IQ Assist - Diagnostic and Remediation Suggestion for User Endpoint.json @@ -1,11 +1,11 @@ { "runbook": { - "id": "18ca3099-32bf-4d53-84a2-4b46759cfe36", - "createdTime": "1740577659.648523300", - "lastUpdatedTime": "1740577797.861110000", + "id": "ed869632-9aae-4db7-8979-c1cb19fa3856", + "createdTime": "1740557225.531146600", + "lastUpdatedTime": "1764176108.229904400", "factoryResourceName": null, "isFactory": false, - "name": "example - Riverbed IQ Assist - Diagnostic and Remediation Suggestion for User Endpoint", + "name": "Demo - Riverbed IQ Assist - On-Demand Diagnostic and Remediation Suggestion for User Endpoint", "description": "Diagnose the user endpoint and suggest remediations", "isReady": false, "triggerType": "on_demand_input", @@ -13,7 +13,7 @@ "primitiveVariables": [ { "type": "string", - "defaultValue": "devicename", + "defaultValue": "Adam_Covert_WKS", "name": "runtime.Device_Name", "isReadonly": false }, @@ -49,13 +49,13 @@ }, { "type": "string", - "defaultValue": "", + "defaultValue": "my-demo", "name": "runtime.Aternity_EUEM_ENV", "isReadonly": false }, { "type": "string", - "defaultValue": "", + "defaultValue": "3", "name": "runtime.Aternity_EUEM_ACCOUNT_ID", "isReadonly": false }, @@ -83,52 +83,53 @@ "subflowVariables": null, "nodes": [ { - "id": "ec14b9db-670d-4594-a25b-87b224257e68", + "id": "1a138bca-e910-45a6-b876-00e2acd374a8", "isIntegrationSubflowNode": false, "type": "on_demand_input", "label": "Input", "description": "", "properties": { - "x": 368.00000000000006, - "y": 350, + "x": 408.0000000000001, + "y": 290, "triggerType": "on_demand_input", "debug": false, "outputDataFormat": "summary", - "synthKeys": [], - "inputVariables": [ - "runtime.Device_Name" + "synthKeys": [ + { + "id": "user_device", + "label": "User Device", + "type": "object", + "unit": "", + "dataOceanId": "user_device", + "dataOceanKeys": [ + { + "id": "user_device.device_name", + "label": "User Device Name", + "type": "string", + "category": "Device", + "unit": "none" + } + ] + } ], + "inputVariables": [], "outputVariables": [] }, "wires": [ [ - "bf00fa98-1597-4ca7-9eba-ea4edfb9849c" + "a7faf9c0-5399-4b96-8125-f8033dfa1552" ] ] }, { - "id": "4f8436da-b45c-4901-8874-cb6cd33e079e", - "isIntegrationSubflowNode": false, - "type": "insight", - "label": "Display Computer Details in IQ", - "description": "", - "properties": { - "x": 917, - "y": 410, - "template": "

User Endpoint: {{variables[\"runtime.Device_Name\"]}} 

", - "debug": false - }, - "wires": [] - }, - { - "id": "4031c6dd-15ce-45e7-8aca-3dd69a7616f8", + "id": "c90e3728-3f44-4cfd-a68a-4719b0628cde", "isIntegrationSubflowNode": false, "type": "genai", "label": "Riverbed IQ Assist: Diagnose Health Events (GenAI)", "description": "", "properties": { "x": 907, - "y": 250, + "y": 270, "instructions": "You are an end-user computing experts, specialist about endpoints especially Windows and Mac OS.\nYour role is to analyze recent health events that can impact the stability of the endpoint. Follow these instructions carefully:\n\n1. Adopt the persona of a professional, concise analyst specializing in troubleshooting performance issues related to endpoints, networks, and applications.\n2. Process the provided data thoroughly to analyze performance trends, metrics, and anomalies. Focus on identifying the **top 3 most relevant findings or anomalies** that are critical to performance.\n3. For each identified issue, include a brief but detailed summary explaining the finding, why it is important, and its potential impact on the system or user experience.\n4. Structure each finding as an itemized, numbered list within an HTML `
` tag to ensure easily readable output. Each item should clearly and concisely describe the issue while maintaining a professional tone.\n5. Ensure that the information is organized, unambiguous, and actionable for the person relying on it.\n\nHere is an example of the expected format for the HTML output:\n\"\"\"\n
\n

Finding #1: [Issue description].
Explanation: [Why this matters and the potential impact].

\n

Finding #2: [Issue description].
Explanation: [Why this matters and the potential impact].

\n

Finding #3: [Issue description].
Explanation: [Why this matters and the potential impact].

\n
\n
\n

AI-generated content

\n
\n\"\"\"\n\nOnly include the top 3 findings—no more, no less. Avoid redundancies and keep the focus on critical insights.", "instructionsLocation": "enter", "queryLocation": "$parent", @@ -136,19 +137,19 @@ }, "wires": [ [ - "485bf125-4b2e-4fb3-9ef7-4e1a7ca92da3" + "1b4f7aef-1579-4546-8d85-4d08766ada06" ] ] }, { - "id": "485bf125-4b2e-4fb3-9ef7-4e1a7ca92da3", + "id": "1b4f7aef-1579-4546-8d85-4d08766ada06", "isIntegrationSubflowNode": false, "type": "set_primitive_variables", "label": "Format Insight Health Events", "description": "", "properties": { "x": 1138, - "y": 270, + "y": 290, "variables": [ { "name": "runtime.Insight_Health_HTML" @@ -159,64 +160,23 @@ }, "wires": [ [ - "378955b0-4177-4fca-9f42-eee865adb747", - "17db9e49-1e6f-4f33-8bd6-0b8e57b97658" - ] - ] - }, - { - "id": "bf00fa98-1597-4ca7-9eba-ea4edfb9849c", - "isIntegrationSubflowNode": false, - "type": "subflow", - "label": "Aternity: Get Device Health Events", - "description": "", - "properties": { - "x": 676, - "y": 350, - "debug": false, - "configurationId": "5a13d267-e1d0-4750-aa7a-fd0416499efc", - "in": [ - { - "inner": "subflow.Aternity_Connector", - "outer": "00000000-0000-0000-0000-000000000000", - "method": "connector" - }, - { - "inner": "subflow.Device_Name", - "outer": "runtime.Device_Name", - "method": "runtime" - } - ], - "out": [ - { - "inner": "subflow.Successful", - "outer": "" - }, - { - "inner": "subflow.Error_Message", - "outer": "" - } - ] - }, - "wires": [ - [ - "4031c6dd-15ce-45e7-8aca-3dd69a7616f8", - "4f8436da-b45c-4901-8874-cb6cd33e079e" + "66ccc5ab-0a16-4e79-8839-a1092e8ba2cc", + "99c4fbcd-758e-40e8-bb2b-1fbe2c99f40d" ] ] }, { - "id": "378955b0-4177-4fca-9f42-eee865adb747", + "id": "66ccc5ab-0a16-4e79-8839-a1092e8ba2cc", "isIntegrationSubflowNode": false, "type": "http", "label": "Aternity: Get available Remediations", "description": "", "properties": { "x": 1339, - "y": 350, + "y": 370, "syncCall": { "request": { - "authenticationProfileId": "220091de-418b-4317-889a-c658c4f936ac", + "authenticationProfileId": "6701eda4-14c0-414a-8985-57b1855419a7", "edgeDeviceId": "", "httpVerbTemplate": "GET", "endpointTemplate": "https://{{variables[\"runtime.Aternity_EUEM_ENV\"]}}-odata.aternity.com/aternity.odata/latest/REMEDIATION_ACTIONS_INVENTORY?$filter=ACCOUNT_ID eq {{variables[\"runtime.Aternity_EUEM_ACCOUNT_ID\"]}} &$select=ACTION_DESCRIPTION,ACTION_NAME,IS_SUPPORTED_MACOS,IS_SUPPORTED_WINDOWS", @@ -230,19 +190,19 @@ }, "wires": [ [ - "ec8bc4f2-dffb-47cf-85d9-8ff8b3fd5172" + "e3db3fde-7d9c-4fcc-9f0d-a3d6aeac3d51" ] ] }, { - "id": "ec8bc4f2-dffb-47cf-85d9-8ff8b3fd5172", + "id": "e3db3fde-7d9c-4fcc-9f0d-a3d6aeac3d51", "isIntegrationSubflowNode": false, "type": "set_primitive_variables", "label": "Extract Remediations", "description": "", "properties": { "x": 1555, - "y": 370, + "y": 390, "variables": [ { "name": "runtime.Remediations" @@ -253,19 +213,19 @@ }, "wires": [ [ - "7f2b8ac9-48df-4c2d-b374-02413773acf0" + "55cef427-b5e1-4183-b417-f7f5b4d48275" ] ] }, { - "id": "bc7248ff-f875-4354-8bbb-0b1e38cb6fb8", + "id": "9616cb12-42ef-47a2-8195-0780e22d8e69", "isIntegrationSubflowNode": false, "type": "set_primitive_variables", "label": "Format Insight", "description": "", "properties": { "x": 2246, - "y": 270, + "y": 290, "variables": [ { "name": "runtime.Suggestion_HTML" @@ -276,19 +236,19 @@ }, "wires": [ [ - "94ce60a8-d84e-4c62-adcb-dcb22973ef5b" + "2f991c21-e59d-41ae-a5fc-55cdecc7fea7" ] ] }, { - "id": "94ce60a8-d84e-4c62-adcb-dcb22973ef5b", + "id": "2f991c21-e59d-41ae-a5fc-55cdecc7fea7", "isIntegrationSubflowNode": false, "type": "rvbd_ui_text", "label": "Display: Remediation", "description": "", "properties": { "x": 2481, - "y": 190, + "y": 210, "title": "Suggested Remediations", "row": "20", "notes": "

{{variables[\"runtime.Suggestion_HTML\"]}}

", @@ -297,14 +257,14 @@ "wires": [] }, { - "id": "c794bb00-9130-43fd-8c0c-978939a26443", + "id": "8f97a64d-c825-4079-b62b-02953245cd62", "isIntegrationSubflowNode": false, "type": "genai", "label": "Riverbed IQ Assist: Suggest Remediations (GenAI)", "description": "", "properties": { "x": 2019.9999999999998, - "y": 250, + "y": 270, "instructions": "Follow the instructions in the query", "instructionsLocation": "enter", "queryLocation": "runtime.Prompt_Template", @@ -312,19 +272,19 @@ }, "wires": [ [ - "bc7248ff-f875-4354-8bbb-0b1e38cb6fb8" + "9616cb12-42ef-47a2-8195-0780e22d8e69" ] ] }, { - "id": "7f2b8ac9-48df-4c2d-b374-02413773acf0", + "id": "55cef427-b5e1-4183-b417-f7f5b4d48275", "isIntegrationSubflowNode": false, "type": "set_primitive_variables", "label": "Prepare Query", "description": "", "properties": { "x": 1777, - "y": 370, + "y": 390, "variables": [ { "name": "runtime.Prompt_Template" @@ -335,19 +295,19 @@ }, "wires": [ [ - "c794bb00-9130-43fd-8c0c-978939a26443" + "8f97a64d-c825-4079-b62b-02953245cd62" ] ] }, { - "id": "17db9e49-1e6f-4f33-8bd6-0b8e57b97658", + "id": "99c4fbcd-758e-40e8-bb2b-1fbe2c99f40d", "isIntegrationSubflowNode": false, "type": "rvbd_ui_text", "label": "Display: Diagnostic", "description": "", "properties": { "x": 1344, - "y": 190, + "y": 210, "title": "Diagnostic", "row": "30", "notes": "

{{variables[\"runtime.Insight_Health_HTML\"]}}

", @@ -356,41 +316,84 @@ "wires": [] }, { - "id": "33b36b1d-9991-4e2f-9a58-e74ebdaf487e", + "id": "4a85d86d-8cf9-4e53-9a70-a116c82a8b51", "isIntegrationSubflowNode": false, "type": "comment", "label": "Comment", "description": "", "properties": { - "x": 50, + "x": 108, "y": 50, - "comment": "

Setup

\n

Diagnose the user endpoint and suggest remediations.

\n


\n

Prerequisites:

\n\n


\n


", + "comment": "

Setup

Diagnose the user endpoint and suggest remediations.


Prerequisites:


Demo

", + "debug": false + }, + "wires": [] + }, + { + "id": "799de0d7-1c42-4eca-81e5-35c263bd9ac9", + "isIntegrationSubflowNode": false, + "type": "comment", + "label": "Comment 1", + "description": "", + "properties": { + "x": 128, + "y": 520, + "comment": "

Version 2025-11-05-1

", "debug": false }, "wires": [] + }, + { + "id": "a7faf9c0-5399-4b96-8125-f8033dfa1552", + "isIntegrationSubflowNode": false, + "type": "data_ocean_dynamic", + "label": "Data Store", + "description": "", + "properties": { + "x": 658, + "y": 300, + "objType": "aternity_device_health_events_hourly.traffic", + "timeSeries": false, + "limit": "100", + "topBy": [ + { + "id": "sum_unique_health_events", + "direction": "desc" + } + ], + "groupBy": [ + "user_device.device_name", + "health_event_name", + "health_event_severity", + "health_event_status", + "health_event_error", + "health_event_details", + "health_event_category", + "health_event_component", + "health_event_last_timestamp" + ], + "duration": 604800, + "filters": {}, + "debug": false + }, + "wires": [ + [ + "c90e3728-3f44-4cfd-a68a-4719b0628cde" + ] + ] } ], "lastUpdatedUser": "Runbook Export", "createdByUser": "Runbook Export", - "eTag": "W/\"datetime'2025-02-26T13%3A49%3A57.8808898Z'\"", + "eTag": "W/\"datetime'2025-11-26T16%3A55%3A08.2510231Z'\"", "variant": "on_demand", - "seriesId": "18ca3099-32bf-4d53-84a2-4b46759cfe36", + "seriesId": "ed869632-9aae-4db7-8979-c1cb19fa3856", "version": "1.0", "otherVersions": null, "isScheduled": false, - "isValidated": true + "isValidated": true, + "isProprietary": false }, - "dependencies": [ - { - "id": "5a13d267-e1d0-4750-aa7a-fd0416499efc", - "type": "subflow", - "name": "Aternity: Get Device Health Events", - "globalId": "Aternity::Get_Device_Health_Events", - "originalVersion": "2.1.0", - "nodeLabel": "Aternity: Get Device Health Events", - "sourceLocation": "integrationLibrary", - "sourcePackageId": "Aternity" - } - ], - "token": "9bbTio6Eq+yPC+robNvU0bGEIdcbLbpPuqJsws+/+vE=" -} + "dependencies": [], + "token": "rfITEGNI2/Z9i50lZbpmS9Vp1r5QBMPHYi5xnz7b4hA=" +} \ No newline at end of file diff --git a/IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/image.png b/IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/image.png new file mode 100644 index 0000000000000000000000000000000000000000..f43ddd97af333aa0d81e19892f8b4aadbb2e3469 GIT binary patch literal 39577 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 Date: Wed, 26 Nov 2025 18:09:06 +0100 Subject: [PATCH 2/3] IQ: Update 101 suggest remediation cleanup var --- ...ediation Suggestion for User Endpoint.json | 42 ++++++------------- 1 file changed, 12 insertions(+), 30 deletions(-) diff --git a/IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/Riverbed IQ Assist - Diagnostic and Remediation Suggestion for User Endpoint.json b/IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/Riverbed IQ Assist - Diagnostic and Remediation Suggestion for User Endpoint.json index 26c4b7e0..02688054 100644 --- a/IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/Riverbed IQ Assist - Diagnostic and Remediation Suggestion for User Endpoint.json +++ b/IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/Riverbed IQ Assist - Diagnostic and Remediation Suggestion for User Endpoint.json @@ -2,7 +2,7 @@ "runbook": { "id": "ed869632-9aae-4db7-8979-c1cb19fa3856", "createdTime": "1740557225.531146600", - "lastUpdatedTime": "1764176108.229904400", + "lastUpdatedTime": "1764176891.810107300", "factoryResourceName": null, "isFactory": false, "name": "Demo - Riverbed IQ Assist - On-Demand Diagnostic and Remediation Suggestion for User Endpoint", @@ -11,24 +11,6 @@ "triggerType": "on_demand_input", "runtimeVariables": { "primitiveVariables": [ - { - "type": "string", - "defaultValue": "Adam_Covert_WKS", - "name": "runtime.Device_Name", - "isReadonly": false - }, - { - "type": "string", - "defaultValue": null, - "name": "runtime.Device_Type", - "isReadonly": false - }, - { - "type": "string", - "defaultValue": null, - "name": "runtime.Device_Model", - "isReadonly": false - }, { "type": "boolean", "defaultValue": null, @@ -49,13 +31,13 @@ }, { "type": "string", - "defaultValue": "my-demo", + "defaultValue": "", "name": "runtime.Aternity_EUEM_ENV", "isReadonly": false }, { "type": "string", - "defaultValue": "3", + "defaultValue": "", "name": "runtime.Aternity_EUEM_ACCOUNT_ID", "isReadonly": false }, @@ -156,7 +138,7 @@ } ], "transformTemplate": "{% assign title = \"Health Events on \" | append: variables[\"runtime.Device_Name\"] | append: \"\" %}\n{% assign html_string = node_input.output.data[0].keys['gen_ai.response'] | replace: '```html', \"\" | replace: '```', \"\" | replace: '\\n', \"\" | replace: '\\\"', \""\" | replace: '\\\\', '\' | prepend: title %}\n{\n \"runtime.Insight_Health_HTML\": \"{{ html_string }}\"\n}", - "debug": true + "debug": false }, "wires": [ [ @@ -176,7 +158,7 @@ "y": 370, "syncCall": { "request": { - "authenticationProfileId": "6701eda4-14c0-414a-8985-57b1855419a7", + "authenticationProfileId": "", "edgeDeviceId": "", "httpVerbTemplate": "GET", "endpointTemplate": "https://{{variables[\"runtime.Aternity_EUEM_ENV\"]}}-odata.aternity.com/aternity.odata/latest/REMEDIATION_ACTIONS_INVENTORY?$filter=ACCOUNT_ID eq {{variables[\"runtime.Aternity_EUEM_ACCOUNT_ID\"]}} &$select=ACTION_DESCRIPTION,ACTION_NAME,IS_SUPPORTED_MACOS,IS_SUPPORTED_WINDOWS", @@ -209,7 +191,7 @@ } ], "transformTemplate": "{\n \"runtime.Remediations\": {{ node_input.output.data[0].keys['http_response.body']['value'] | json }}\n\n}", - "debug": true + "debug": false }, "wires": [ [ @@ -232,7 +214,7 @@ } ], "transformTemplate": "{% assign html_string = node_input.output.data[0].keys['gen_ai.response'] | replace: '```html', \"\" | replace: '```', \"\" | replace: '\\n', \"\" | replace: '\\\"', \""\" | replace: '\\\\', '\' %}\n{\n \"runtime.Suggestion_HTML\": \"{{ html_string }}\"\n}", - "debug": true + "debug": false }, "wires": [ [ @@ -268,7 +250,7 @@ "instructions": "Follow the instructions in the query", "instructionsLocation": "enter", "queryLocation": "runtime.Prompt_Template", - "debug": true + "debug": false }, "wires": [ [ @@ -291,7 +273,7 @@ } ], "transformTemplate": "{\n \"runtime.Prompt_Template\": \"As an IT specialist with expertise in troubleshooting Windows issues and PowerShell scripting, you analyze the list of remediations to recommend the most suitable. Structure the response within an HTML `
` tag to ensure easily readable output. Your response concisely describe suggested remediation while maintaining a professional tone.\n\n\nList of remediations:\n{% for item in variables[\"runtime.Remediations\"] %}\nRemediation Name: {{ item.ACTION_NAME | escape | replace: '\\n', \"\" | replace: '\\\"', \""\" | replace: '\\\\', '\' }}\nDescription: {{ item.ACTION_DESCRIPTION | escape | replace: '\\n', \"\" | replace: '\\\"', \""\" | replace: '\\\\', '\' }}\n\n{% endfor %}\n\nExample:\n```html\n
    \n
  • Remediation 1
  • \n
  • Remediation 2
  • \n
  • Remediation 3
  • \n
\n```\n\nInclude up to 3 relevant remediations—no more, and if not relevant just says 'Could not find relevant remediation'. Avoid redundancies and keep the focus on critical insights.\n\n---\n\n{{variables[\"runtime.Insight_Health_HTML\"]}}\n\"\n}\n\n", - "debug": true + "debug": false }, "wires": [ [ @@ -357,7 +339,7 @@ "limit": "100", "topBy": [ { - "id": "sum_unique_health_events", + "id": "health_event_last_timestamp", "direction": "desc" } ], @@ -385,7 +367,7 @@ ], "lastUpdatedUser": "Runbook Export", "createdByUser": "Runbook Export", - "eTag": "W/\"datetime'2025-11-26T16%3A55%3A08.2510231Z'\"", + "eTag": "W/\"datetime'2025-11-26T17%3A08%3A11.8250787Z'\"", "variant": "on_demand", "seriesId": "ed869632-9aae-4db7-8979-c1cb19fa3856", "version": "1.0", @@ -395,5 +377,5 @@ "isProprietary": false }, "dependencies": [], - "token": "rfITEGNI2/Z9i50lZbpmS9Vp1r5QBMPHYi5xnz7b4hA=" + "token": "CKEzfh4EVvW3fNgnKOQlXxqG6ONUxH4Z/KxO+Kn97UU=" } \ No newline at end of file From 06073af53c9eb5d7613f0fab14da8035664cfbf5 Mon Sep 17 00:00:00 2001 From: Gwen Blum <19484478+gwenblum@users.noreply.github.com> Date: Wed, 26 Nov 2025 20:22:21 +0100 Subject: [PATCH 3/3] Update IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/README.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../101-riverbed-iq-assist-suggest-remediation/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/README.md b/IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/README.md index c6729a74..7b920e47 100644 --- a/IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/README.md +++ b/IQ/Automation/On-Demand Runbooks/101-riverbed-iq-assist-suggest-remediation/README.md @@ -6,7 +6,7 @@ The runbook fetches health events for the request device, uses a first GenAI nod ![image](image.png) -## Prerequisistes +## Prerequisites 1. Riverbed IQ Assist feature is enabled