Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions packages/gooddata-eval/src/gooddata_eval/cli/agentic_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from gooddata_eval.core.agentic._trace_linker import BackgroundTraceLinker, SubmitTraceLink, run_trace_link_inline
from gooddata_eval.core.agentic.alert_skill import evaluate_agentic_alert_skill
from gooddata_eval.core.agentic.conversation import ConversationFixture, evaluate_agentic_conversation
from gooddata_eval.core.agentic.dashboard_summary import evaluate_agentic_dashboard_summary
from gooddata_eval.core.agentic.general_question import evaluate_agentic_general_question
from gooddata_eval.core.agentic.guardrail import evaluate_agentic_guardrail
from gooddata_eval.core.agentic.kda_skill import evaluate_agentic_kda_skill
Expand Down Expand Up @@ -44,6 +45,7 @@ class _LfKw(TypedDict, total=False):
"agentic_guardrail",
"agentic_conversation",
"agentic_kda_skill",
"agentic_dashboard_summary",
}
)

Expand Down Expand Up @@ -228,6 +230,27 @@ def _dispatch_agentic(
agent_id=agent_id,
**lf_kw,
)
elif kind == "agentic_dashboard_summary":
summary_input = item.summary_input
if summary_input is None:
raise ValueError(f"agentic_dashboard_summary item '{item.id}' is missing required 'summary_input'.")
return evaluate_agentic_dashboard_summary(
host=host,
token=token,
workspace_id=workspace_id,
dashboard_id=summary_input.dashboard_id,
expected_output=eo,
# The fixture's own wording is the prompt under test -- a localized fixture is
# only meaningful if its own phrasing is what reaches the agent.
question=item.question,
# Each widget costs an execution, so a fixture asserting on a handful of charts
# can name them instead of paying for the whole dashboard. Same field and meaning
# the headless /summary endpoint gives it; None summarizes everything.
only_visualizations=summary_input.visualizations,
k=k,
agent_id=agent_id,
**lf_kw,
)
elif kind == "agentic_conversation":
fixture_data = eo.get("fixture") or eo if isinstance(eo, dict) else {}
return evaluate_agentic_conversation(
Expand Down
Loading
Loading