Skip to content

Commit 80675be

Browse files
committed
Add intelliaide evaluation test cases
1 parent b821922 commit 80675be

5 files changed

Lines changed: 238 additions & 2 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
.eval-workspaces/
2+
deploy-vertex-e2e.sh
3+
setup-vertex-adc.sh
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
You are an assistant that answers questions about the IntelliAide root-cause analysis pipeline for OpenShift clusters.
2+
3+
The IntelliAide skill lives at /app/skills/intelliaide/. When answering questions:
4+
1. Read /app/skills/intelliaide/SKILL.md first — it contains the full pipeline specification and all protocol rules
5+
2. For implementation constants (thresholds, path literals), read the relevant Python scripts:
6+
- /app/skills/intelliaide/extract_cluster.py
7+
- /app/skills/intelliaide/perform_rca.py
8+
- /app/skills/intelliaide/analyze_data.py
9+
3. For configuration defaults, read /app/skills/intelliaide/Config/config.json
10+
4. Base every answer strictly on what is in those files — do not rely on prior knowledge
11+
5. If the answer is not in the files, say so clearly
Lines changed: 217 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,217 @@
1+
# ── POSITIVE CASES ────────────────────────────────────────────────────────────
2+
# Tests that verify the agent correctly reads and applies the IntelliAide
3+
# SKILL.md specification. Each expected value is pinned to a specific source:
4+
# SKILL.md line 191 → chunk_summary_max_words: 600
5+
# SKILL.md line 144 → high_priority_file_selection_max: 20
6+
# SKILL.md line 89 → sdk_buffer_size_mb: 1
7+
# SKILL.md line 371 → rca_summary_top_level_forbidden: false
8+
# SKILL.md lines 387–396 → proposal_risk_level_count: 4
9+
# Config/config.json line 6 → default_max_chunk_tokens: 80000
10+
# Config/config.json line 8 → default_max_iterations: 25
11+
# extract_cluster.py line 47 → data_input_path: /data/input
12+
# extract_cluster.py line 68 → min_data_files: 3
13+
# extract_cluster.py line 70 → max_unwrap_depth: 4
14+
15+
- name: priority_tier_count
16+
query: "How many priority tiers does the IntelliAide RCA pipeline run analysis passes for?"
17+
schema:
18+
type: object
19+
properties:
20+
tier_count:
21+
type: integer
22+
enum: [1, 2, 3, 4, 5]
23+
description: "Number of priority tiers (high/medium/low) in the pipeline. Use the 'intelliaide' skill to find this."
24+
required: [tier_count]
25+
expected:
26+
tier_count: 3
27+
28+
- name: chunk_summary_max_words
29+
query: "What is the maximum number of words IntelliAide allows for each per-chunk root-cause summary the orchestrating agent writes in Step 4b?"
30+
schema:
31+
type: object
32+
properties:
33+
max_words:
34+
type: integer
35+
enum: [300, 500, 600, 800, 1000]
36+
description: "Word limit for per-chunk summaries written by the orchestrating agent. Use the 'intelliaide' skill to find this."
37+
required: [max_words]
38+
expected:
39+
max_words: 600
40+
41+
- name: data_input_path
42+
query: "What filesystem path does IntelliAide's extract_cluster.py expect to find must-gather data mounted from the PVC?"
43+
schema:
44+
type: object
45+
properties:
46+
path:
47+
type: string
48+
enum: ["/data/input", "/mnt/must-gather", "/var/must-gather", "/data/must-gather", "/tmp/input"]
49+
description: "PVC mount path where must-gather data is expected. Use the 'intelliaide' skill to find this."
50+
required: [path]
51+
expected:
52+
path: "/data/input"
53+
54+
- name: min_data_files
55+
query: "What is the minimum number of files that must exist in the must-gather data source for extract_cluster.py to succeed? Fewer files cause it to exit with failure."
56+
schema:
57+
type: object
58+
properties:
59+
min_files:
60+
type: integer
61+
enum: [1, 2, 3, 5, 10]
62+
description: "Minimum file count for extract_cluster.py to proceed without failure. Use the 'intelliaide' skill to find this."
63+
required: [min_files]
64+
expected:
65+
min_files: 3
66+
67+
- name: max_unwrap_depth
68+
query: "How many directory levels deep will IntelliAide's extract_cluster.py traverse when unwrapping single-child wrapper directories to reach the actual data root?"
69+
schema:
70+
type: object
71+
properties:
72+
max_depth:
73+
type: integer
74+
enum: [2, 3, 4, 5, 6]
75+
description: "Maximum single-child wrapper directory traversal depth in extract_cluster.py. Use the 'intelliaide' skill to find this."
76+
required: [max_depth]
77+
expected:
78+
max_depth: 4
79+
80+
- name: high_priority_file_selection_max
81+
query: "According to IntelliAide's file-selection rules in Step 2b, what is the maximum number of high-priority files the orchestrating agent should select?"
82+
schema:
83+
type: object
84+
properties:
85+
max_files:
86+
type: integer
87+
enum: [10, 15, 20, 25, 30]
88+
description: "Upper bound on high-priority file count in Step 2b selection. Use the 'intelliaide' skill to find this."
89+
required: [max_files]
90+
expected:
91+
max_files: 20
92+
93+
- name: default_max_chunk_tokens
94+
query: "What is the default max_chunk_tokens value in IntelliAide's config.json?"
95+
schema:
96+
type: object
97+
properties:
98+
max_tokens:
99+
type: integer
100+
enum: [40000, 60000, 80000, 100000, 128000]
101+
description: "Default RCA chunking token budget from config.json. Use the 'intelliaide' skill to find this."
102+
required: [max_tokens]
103+
expected:
104+
max_tokens: 80000
105+
106+
- name: default_max_iterations
107+
query: "What is the default max_iterations value in IntelliAide's agent configuration?"
108+
schema:
109+
type: object
110+
properties:
111+
max_iterations:
112+
type: integer
113+
enum: [10, 15, 20, 25, 30]
114+
description: "Default agent tool-call iteration limit from config.json. Use the 'intelliaide' skill to find this."
115+
required: [max_iterations]
116+
expected:
117+
max_iterations: 25
118+
119+
- name: proposal_risk_level_count
120+
query: "How many distinct risk levels does the IntelliAide output schema allow for the proposal.risk field?"
121+
schema:
122+
type: object
123+
properties:
124+
count:
125+
type: integer
126+
enum: [2, 3, 4, 5]
127+
description: "Number of allowed values for proposal.risk in the output schema. Use the 'intelliaide' skill to find this."
128+
required: [count]
129+
expected:
130+
count: 4
131+
132+
- name: rca_summary_top_level_forbidden
133+
query: "Does IntelliAide's final JSON response include a top-level 'rcaSummary' field?"
134+
schema:
135+
type: object
136+
properties:
137+
has_rca_summary_key:
138+
type: boolean
139+
description: "Whether the final response contains a top-level rcaSummary key. Use the 'intelliaide' skill to find this."
140+
required: [has_rca_summary_key]
141+
expected:
142+
has_rca_summary_key: false
143+
144+
# ── NEGATIVE CASES ────────────────────────────────────────────────────────────
145+
# Tests that encode the failure modes a naive agent (without IntelliAide) would
146+
# hit. They guard against regressions if someone later simplifies the pipeline
147+
# by removing buffer-safety rules, the kubectl prohibition, or the explicit
148+
# session-crash warning.
149+
#
150+
# Each case is a knowledge question about a specific failure scenario. An agent
151+
# without IntelliAide would either answer incorrectly (guessing from training
152+
# data) or lack the vocabulary to answer at all. An agent that reads SKILL.md
153+
# picks the correct enum value because the protocol document addresses these
154+
# exact failure modes.
155+
156+
- name: direct_bundle_read_overflows_sdk_buffer
157+
query: "If an agent bypasses IntelliAide and runs 'cat /data/input/namespaces/openshift-etcd/pods/etcd-0/etcd/etcd/logs/current.log' directly after extract_cluster.py succeeds, what does IntelliAide's buffer safety rule say this will overflow?"
158+
schema:
159+
type: object
160+
properties:
161+
what_overflows:
162+
type: string
163+
enum: ["sdk_message_buffer", "kubernetes_event_log", "etcd_wal", "container_stdout", "cluster_api_server"]
164+
description: "What a direct inline must-gather file read overflows. Use the 'intelliaide' skill to find this."
165+
required: [what_overflows]
166+
expected:
167+
what_overflows: "sdk_message_buffer"
168+
169+
- name: sdk_buffer_size_mb
170+
query: "According to IntelliAide's buffer safety rule, what is the size in megabytes of the SDK message buffer that reading a must-gather file inline can overflow?"
171+
schema:
172+
type: object
173+
properties:
174+
buffer_size_mb:
175+
type: integer
176+
enum: [1, 5, 10, 50, 100]
177+
description: "SDK message buffer size in MB stated in IntelliAide's safety rule. Use the 'intelliaide' skill to find this."
178+
required: [buffer_size_mb]
179+
expected:
180+
buffer_size_mb: 1
181+
182+
- name: direct_bundle_read_session_consequence
183+
query: "According to IntelliAide's buffer safety rule, what happens to the orchestrating agent's session when a must-gather bundle file is read inline and overflows the SDK buffer?"
184+
schema:
185+
type: object
186+
properties:
187+
consequence:
188+
type: string
189+
enum: ["crashes_the_session", "returns_empty_string", "truncates_to_4096_bytes", "raises_python_exception", "restarts_the_container"]
190+
description: "Consequence of an SDK buffer overflow from an inline must-gather read. Use the 'intelliaide' skill to find this."
191+
required: [consequence]
192+
expected:
193+
consequence: "crashes_the_session"
194+
195+
- name: grep_r_on_bundle_forbidden
196+
query: "Is running 'grep -r' across the must-gather bundle files after Step 1 allowed by IntelliAide's buffer safety rule?"
197+
schema:
198+
type: object
199+
properties:
200+
is_allowed:
201+
type: boolean
202+
description: "Whether grep -r on must-gather bundle files is permitted after extract_cluster.py succeeds. Use the 'intelliaide' skill to find this."
203+
required: [is_allowed]
204+
expected:
205+
is_allowed: false
206+
207+
- name: kubectl_fallback_forbidden_on_failure
208+
query: "If a step in the IntelliAide pipeline fails, is the orchestrating agent allowed to fall back to running kubectl or oc commands to gather data instead?"
209+
schema:
210+
type: object
211+
properties:
212+
fallback_allowed:
213+
type: boolean
214+
description: "Whether kubectl/oc fallback is permitted when IntelliAide pipeline steps fail. Use the 'intelliaide' skill to find this."
215+
required: [fallback_allowed]
216+
expected:
217+
fallback_allowed: false

evals/workspace/skills/intelliaide

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../../intelliaide

intelliaide/OWNERS

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
# See the OWNERS docs: https://git.k8s.io/community/contributors/guide/owners.md
22

33
approvers:
4-
-
4+
- Prashanth684
5+
- dattaramba
56
reviewers:
6-
-
7+
- Prashanth684
8+
- dattaramba
9+
10+
11+
component: "IntelliAide RCA Lightspeed Skills"

0 commit comments

Comments
 (0)