diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 48b8b2db15..1e18738019 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "1.150.0"
+ ".": "1.149.0"
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 596ad4c0da..36b3bd55f9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,31 +1,5 @@
# Changelog
-## [1.150.0](https://github.com/googleapis/python-aiplatform/compare/v1.149.0...v1.150.0) (2026-05-05)
-
-
-### Features
-
-* Add Agent Engine Runtime Versioning support to SDK. ([b8eaefb](https://github.com/googleapis/python-aiplatform/commit/b8eaefb5236669953865a770ba5fddfaf2dbe2b3))
-* Add Agent Engine Sandbox Snapshots Module ([f48e54b](https://github.com/googleapis/python-aiplatform/commit/f48e54b56948108aa11e49f6c56fa9b69d7f18ef))
-* Add support for templates sub-module for Sandboxes in Vertex AI GenAI SDK. ([68f053e](https://github.com/googleapis/python-aiplatform/commit/68f053ea4160fa1fd1a96435fe83965030d0e2eb))
-* Add support for wait for operation complete for sandbox sub-modules ([737ad1c](https://github.com/googleapis/python-aiplatform/commit/737ad1c4489e9a9535b210b8a49bd864dabc80e4))
-* Disable streaming check that should have already been disabled ([762d20c](https://github.com/googleapis/python-aiplatform/commit/762d20ca21af55df75b003ad79a0e79596dbb4f8))
-* Faster sandbox creation with templates and snapshots and improve dataplane routing and security. ([9dccee2](https://github.com/googleapis/python-aiplatform/commit/9dccee26ddcad4e13e26b669906ba82945cbff58))
-* GenAI Client(evals) - Support eval_cases with multi-turn agent_data in run_inference() ([a1680d3](https://github.com/googleapis/python-aiplatform/commit/a1680d3a3f5fc4a55316c6071209a15e6753d4f6))
-* GenAI Client(evals) - Support N+1 Agent Engine inference via agent_data in run_inference() ([9ea4aa6](https://github.com/googleapis/python-aiplatform/commit/9ea4aa64ad64a4b55860f064a5284bba64034f6e))
-* GenAI SDK client(multimodal) - Accept an explicit bigquery_uri parameter in create_from_bigquery ([0bb2ecd](https://github.com/googleapis/python-aiplatform/commit/0bb2ecd2bca01554d91b1f5f3d69f88237adaa3d))
-* Migrate model garden to agentplatform ([d5e71ff](https://github.com/googleapis/python-aiplatform/commit/d5e71ff860e926cc1877a5f1bba1a00617a23e7a))
-* Migrate resources to agentplatform ([5788c50](https://github.com/googleapis/python-aiplatform/commit/5788c50bb6dad16081ba0966ceba61b6e70f95cd))
-* Update sdk to support python-a2a sdk 1.0 via a new GA A2a framework template ([762d20c](https://github.com/googleapis/python-aiplatform/commit/762d20ca21af55df75b003ad79a0e79596dbb4f8))
-
-
-### Bug Fixes
-
-* Allow setting max_wait_duration to 0 for indefinite waiting with DWS ([d9675fd](https://github.com/googleapis/python-aiplatform/commit/d9675fdf051233539f478187143f2833fd6e6af0))
-* Custom job url after rebrand ([aabe816](https://github.com/googleapis/python-aiplatform/commit/aabe81676432e96f2c2dff49b64fdcdaed5deb8a))
-* Flaky tests in feature store relates cases due to class instantiation ([9fd0fe0](https://github.com/googleapis/python-aiplatform/commit/9fd0fe06eeceb77fa3ba12cfb43532824cf61d26))
-* GenAI SDK client(multimodal) - Preserve existing metadata when creating from bigframes ([bc2260d](https://github.com/googleapis/python-aiplatform/commit/bc2260dada6cc9f3d6179dc544cc20414de59653))
-
## [1.149.0](https://github.com/googleapis/python-aiplatform/compare/v1.148.1...v1.149.0) (2026-04-27)
diff --git a/google/cloud/aiplatform/gapic_version.py b/google/cloud/aiplatform/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform/gapic_version.py
+++ b/google/cloud/aiplatform/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/google/cloud/aiplatform/v1/schema/predict/instance/gapic_version.py b/google/cloud/aiplatform/v1/schema/predict/instance/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform/v1/schema/predict/instance/gapic_version.py
+++ b/google/cloud/aiplatform/v1/schema/predict/instance/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/google/cloud/aiplatform/v1/schema/predict/instance_v1/gapic_version.py b/google/cloud/aiplatform/v1/schema/predict/instance_v1/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform/v1/schema/predict/instance_v1/gapic_version.py
+++ b/google/cloud/aiplatform/v1/schema/predict/instance_v1/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/google/cloud/aiplatform/v1/schema/predict/params/gapic_version.py b/google/cloud/aiplatform/v1/schema/predict/params/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform/v1/schema/predict/params/gapic_version.py
+++ b/google/cloud/aiplatform/v1/schema/predict/params/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/google/cloud/aiplatform/v1/schema/predict/params_v1/gapic_version.py b/google/cloud/aiplatform/v1/schema/predict/params_v1/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform/v1/schema/predict/params_v1/gapic_version.py
+++ b/google/cloud/aiplatform/v1/schema/predict/params_v1/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/google/cloud/aiplatform/v1/schema/predict/prediction/gapic_version.py b/google/cloud/aiplatform/v1/schema/predict/prediction/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform/v1/schema/predict/prediction/gapic_version.py
+++ b/google/cloud/aiplatform/v1/schema/predict/prediction/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/google/cloud/aiplatform/v1/schema/predict/prediction_v1/gapic_version.py b/google/cloud/aiplatform/v1/schema/predict/prediction_v1/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform/v1/schema/predict/prediction_v1/gapic_version.py
+++ b/google/cloud/aiplatform/v1/schema/predict/prediction_v1/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/google/cloud/aiplatform/v1/schema/trainingjob/definition/gapic_version.py b/google/cloud/aiplatform/v1/schema/trainingjob/definition/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform/v1/schema/trainingjob/definition/gapic_version.py
+++ b/google/cloud/aiplatform/v1/schema/trainingjob/definition/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/google/cloud/aiplatform/v1/schema/trainingjob/definition_v1/gapic_version.py b/google/cloud/aiplatform/v1/schema/trainingjob/definition_v1/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform/v1/schema/trainingjob/definition_v1/gapic_version.py
+++ b/google/cloud/aiplatform/v1/schema/trainingjob/definition_v1/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/google/cloud/aiplatform/v1beta1/schema/predict/instance/gapic_version.py b/google/cloud/aiplatform/v1beta1/schema/predict/instance/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform/v1beta1/schema/predict/instance/gapic_version.py
+++ b/google/cloud/aiplatform/v1beta1/schema/predict/instance/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/google/cloud/aiplatform/v1beta1/schema/predict/instance_v1beta1/gapic_version.py b/google/cloud/aiplatform/v1beta1/schema/predict/instance_v1beta1/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform/v1beta1/schema/predict/instance_v1beta1/gapic_version.py
+++ b/google/cloud/aiplatform/v1beta1/schema/predict/instance_v1beta1/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/google/cloud/aiplatform/v1beta1/schema/predict/params/gapic_version.py b/google/cloud/aiplatform/v1beta1/schema/predict/params/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform/v1beta1/schema/predict/params/gapic_version.py
+++ b/google/cloud/aiplatform/v1beta1/schema/predict/params/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/google/cloud/aiplatform/v1beta1/schema/predict/params_v1beta1/gapic_version.py b/google/cloud/aiplatform/v1beta1/schema/predict/params_v1beta1/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform/v1beta1/schema/predict/params_v1beta1/gapic_version.py
+++ b/google/cloud/aiplatform/v1beta1/schema/predict/params_v1beta1/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/google/cloud/aiplatform/v1beta1/schema/predict/prediction/gapic_version.py b/google/cloud/aiplatform/v1beta1/schema/predict/prediction/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform/v1beta1/schema/predict/prediction/gapic_version.py
+++ b/google/cloud/aiplatform/v1beta1/schema/predict/prediction/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/google/cloud/aiplatform/v1beta1/schema/predict/prediction_v1beta1/gapic_version.py b/google/cloud/aiplatform/v1beta1/schema/predict/prediction_v1beta1/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform/v1beta1/schema/predict/prediction_v1beta1/gapic_version.py
+++ b/google/cloud/aiplatform/v1beta1/schema/predict/prediction_v1beta1/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/gapic_version.py b/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/gapic_version.py
+++ b/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition_v1beta1/gapic_version.py b/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition_v1beta1/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition_v1beta1/gapic_version.py
+++ b/google/cloud/aiplatform/v1beta1/schema/trainingjob/definition_v1beta1/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/google/cloud/aiplatform/version.py b/google/cloud/aiplatform/version.py
index 050a77837b..73e787be69 100644
--- a/google/cloud/aiplatform/version.py
+++ b/google/cloud/aiplatform/version.py
@@ -15,4 +15,4 @@
# limitations under the License.
#
-__version__ = "1.150.0"
+__version__ = "1.149.0"
diff --git a/google/cloud/aiplatform_v1/gapic_version.py b/google/cloud/aiplatform_v1/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform_v1/gapic_version.py
+++ b/google/cloud/aiplatform_v1/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/google/cloud/aiplatform_v1beta1/gapic_version.py b/google/cloud/aiplatform_v1beta1/gapic_version.py
index 050159c67f..92e0d51628 100644
--- a/google/cloud/aiplatform_v1beta1/gapic_version.py
+++ b/google/cloud/aiplatform_v1beta1/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "1.150.0" # {x-release-please-version}
+__version__ = "1.149.0" # {x-release-please-version}
diff --git a/pypi/_vertex_ai_placeholder/version.py b/pypi/_vertex_ai_placeholder/version.py
index 60b33252a5..69e48b1ba6 100644
--- a/pypi/_vertex_ai_placeholder/version.py
+++ b/pypi/_vertex_ai_placeholder/version.py
@@ -15,4 +15,4 @@
# limitations under the License.
#
-__version__ = "1.150.0"
+__version__ = "1.149.0"
diff --git a/samples/generated_samples/snippet_metadata_google.cloud.aiplatform.v1.json b/samples/generated_samples/snippet_metadata_google.cloud.aiplatform.v1.json
index aebed3c072..0f9b93fdac 100644
--- a/samples/generated_samples/snippet_metadata_google.cloud.aiplatform.v1.json
+++ b/samples/generated_samples/snippet_metadata_google.cloud.aiplatform.v1.json
@@ -8,7 +8,7 @@
],
"language": "PYTHON",
"name": "google-cloud-aiplatform",
- "version": "1.150.0"
+ "version": "1.149.0"
},
"snippets": [
{
diff --git a/samples/generated_samples/snippet_metadata_google.cloud.aiplatform.v1beta1.json b/samples/generated_samples/snippet_metadata_google.cloud.aiplatform.v1beta1.json
index a647aad090..81c49fac12 100644
--- a/samples/generated_samples/snippet_metadata_google.cloud.aiplatform.v1beta1.json
+++ b/samples/generated_samples/snippet_metadata_google.cloud.aiplatform.v1beta1.json
@@ -8,7 +8,7 @@
],
"language": "PYTHON",
"name": "google-cloud-aiplatform",
- "version": "1.150.0"
+ "version": "1.149.0"
},
"snippets": [
{
diff --git a/vertexai/_genai/_evals_visualization.py b/vertexai/_genai/_evals_visualization.py
index a3cf2ca93f..ed5e82a93a 100644
--- a/vertexai/_genai/_evals_visualization.py
+++ b/vertexai/_genai/_evals_visualization.py
@@ -166,10 +166,12 @@ def _extract_dataset_rows(dataset: types.EvaluationDataset) -> list[dict[str, An
prompt_key = "request" if "request" in row else "prompt"
prompt_info = _extract_text_and_raw_json(row.get(prompt_key))
response_info = _extract_text_and_raw_json(row.get("response"))
+ ref_info = _extract_text_and_raw_json(row.get("reference"))
processed_row = {
"prompt_display_text": prompt_info["display_text"],
"prompt_raw_json": prompt_info["raw_json"],
- "reference": row.get("reference", ""),
+ "reference": ref_info["display_text"],
+ "reference_raw_json": ref_info["raw_json"],
"response_display_text": response_info["display_text"],
"response_raw_json": response_info["raw_json"],
"intermediate_events": row.get("intermediate_events", None),
@@ -191,9 +193,11 @@ def _extract_dataset_rows(dataset: types.EvaluationDataset) -> list[dict[str, An
response_info = _extract_text_and_raw_json(case.responses[0].response)
reference_text = ""
+ reference_raw_json = ""
if case.reference and case.reference.response:
ref_info = _extract_text_and_raw_json(case.reference.response)
reference_text = ref_info["display_text"]
+ reference_raw_json = ref_info["raw_json"]
agent_data_json = None
if case.agent_data:
@@ -216,6 +220,7 @@ def _extract_dataset_rows(dataset: types.EvaluationDataset) -> list[dict[str, An
"prompt_display_text": prompt_info["display_text"],
"prompt_raw_json": prompt_info["raw_json"],
"reference": reference_text,
+ "reference_raw_json": reference_raw_json,
"response_display_text": response_info["display_text"],
"response_raw_json": response_info["raw_json"],
"intermediate_events": intermediate_events_json,
@@ -250,7 +255,7 @@ def _get_evaluation_html(eval_result_json: str) -> str:
details {{ border: 1px solid #dadce0; border-radius: 8px; padding: 16px; margin-bottom: 16px; background: #fff; }}
summary {{ font-weight: 500; font-size: 1.1em; cursor: pointer; }}
.prompt-container {{ background-color: #e8f0fe; padding: 16px; margin: 12px 0; border-radius: 8px; white-space: pre-wrap; word-wrap: break-word; overflow-wrap: break-word; }}
- .reference-container {{ background-color: #e6f4ea; padding: 16px; margin: 12px 0; border-radius: 8px; white-space: pre-wrap; word-wrap: break-word; overflow-wrap: break-word; }}
+ .reference-container {{ background-color: #fff; border: 1px solid #dadce0; padding: 16px; margin: 12px 0; border-radius: 8px; white-space: pre-wrap; word-wrap: break-word; overflow-wrap: break-word; }}
.agent-info-container {{ background-color: #f1f3f4; padding: 16px; margin: 12px 0; border-radius: 8px; word-wrap: break-word; overflow-wrap: break-word; font-size: 14px; }}
.agent-info-grid {{ display: grid; grid-template-columns: 120px 1fr; gap: 8px; margin-bottom: 12px; }}
.agent-info-grid dt {{ font-weight: 500; color: #3c4043; }}
@@ -579,6 +584,7 @@ def _get_evaluation_html(eval_result_json: str) -> str:
const promptText = isValEmpty(original_case.prompt_display_text) ? '' : original_case.prompt_display_text;
const promptJson = original_case.prompt_raw_json;
const reference = isValEmpty(original_case.reference) ? '' : original_case.reference;
+ const referenceJson = original_case.reference_raw_json;
const responseText = isValEmpty(original_case.response_display_text) ? '' : original_case.response_display_text;
const responseJson = original_case.response_raw_json;
@@ -588,6 +594,18 @@ def _get_evaluation_html(eval_result_json: str) -> str:
}}
const isAgentEval = !!agentData;
+ let isRefAgentData = false;
+ let refAgentDataObj = null;
+ if (reference) {{
+ try {{
+ let parsed = typeof reference === 'string' ? JSON.parse(reference) : reference;
+ if (parsed && parsed.turns) {{
+ isRefAgentData = true;
+ refAgentDataObj = parsed;
+ }}
+ }} catch(e) {{}}
+ }}
+
let card = `Case #${{caseResult.eval_case_index != null ? caseResult.eval_case_index : i}}
`;
if (isAgentEval && agentData.agents && Object.keys(agentData.agents).length > 0) {{
@@ -597,46 +615,55 @@ def _get_evaluation_html(eval_result_json: str) -> str:
`;
}}
- card += `
`;
+ if (promptText) {{
+ card += `
Prompt:
${{DOMPurify.sanitize(marked.parse(String(promptText)))}}
`;
+ }}
+ if (promptJson && promptJson !== '""' && promptJson !== 'null' && promptJson !== '{{}}') {{
+ card += `
View Raw Prompt JSON
${{DOMPurify.sanitize(promptJson)}}`;
+ }}
- const hasMainContent = promptText || responseText || reference;
+ if (responseText) {{
+ const responseTitle = isAgentEval ? 'Final Response' : 'Candidate Response';
+ card += `
${{responseTitle}}
${{DOMPurify.sanitize(marked.parse(String(responseText)))}}`;
+ }}
+ if (responseJson && responseJson !== '""' && responseJson !== 'null' && responseJson !== '{{}}') {{
+ card += `
View Raw Response JSON
${{DOMPurify.sanitize(responseJson)}}`;
+ }}
- if (hasMainContent) {{
- card += `
`;
- if (promptText) {{
- card += `
Prompt:
${{DOMPurify.sanitize(marked.parse(String(promptText)))}}
`;
- }}
- if (promptJson && promptJson !== '""' && promptJson !== 'null' && promptJson !== '{{}}') {{
- card += `
View Raw Prompt JSON
${{DOMPurify.sanitize(promptJson)}}`;
- }}
+ let hasTrace = isAgentEval && agentData.turns;
+ let hasRef = !!reference;
- if (reference) {{
- card += `
Reference:
${{DOMPurify.sanitize(marked.parse(String(reference)))}}
`;
- }}
+ if (hasTrace || hasRef) {{
+ card += `
`;
- if (responseText) {{
- const responseTitle = isAgentEval ? 'Final Response' : 'Candidate Response';
- card += `
${{responseTitle}}
${{DOMPurify.sanitize(marked.parse(String(responseText)))}}`;
+ if (hasTrace) {{
+ let traceContent = formatAgentData(agentData);
+ card += `
+
+ Conversation Trace
+ Sequence of multi-agent events across turns
+ ${{traceContent}}
+
+
`;
}}
- if (responseJson && responseJson !== '""' && responseJson !== 'null' && responseJson !== '{{}}') {{
- card += `
View Raw Response JSON
${{DOMPurify.sanitize(responseJson)}}`;
+
+ if (hasRef) {{
+ card += `
`;
+ if (isRefAgentData) {{
+ let refTraceContent = formatAgentData(refAgentDataObj);
+ card += `
+ Reference
+ Sequence of multi-agent events across turns
+ ${{refTraceContent}}
+ `;
+ }} else {{
+ card += `
Reference
${{DOMPurify.sanitize(marked.parse(String(reference)))}}
`;
+ }}
+ card += `
`;
}}
card += `
`;
}}
- if (isAgentEval && agentData.turns) {{
- let traceContent = formatAgentData(agentData);
- const sidebarStyle = hasMainContent ? '' : 'flex: 1 1 100%;';
-
- card += ``;
- }}
-
- card += `
`;
-
let metricTable = '
Evaluation Metrics
';
const candidateMetrics = (caseResult.response_candidate_results && caseResult.response_candidate_results[0] && caseResult.response_candidate_results[0].metric_results) || {{}};
Object.entries(candidateMetrics).forEach(([name, val]) => {{
@@ -785,6 +812,7 @@ def _get_comparison_html(eval_result_json: str) -> str:
details {{ border: 1px solid #dadce0; border-radius: 8px; padding: 24px; margin-bottom: 24px; background: #fff; }}
summary {{ font-weight: 500; font-size: 1.2em; cursor: pointer; }}
.prompt-container {{ background-color: #e8f0fe; padding: 16px; margin-bottom: 16px; border-radius: 8px; white-space: pre-wrap; word-wrap: break-word; overflow-wrap: break-word; }}
+ .reference-container {{ background-color: #fff; border: 1px solid #dadce0; padding: 16px; margin-bottom: 16px; border-radius: 8px; white-space: pre-wrap; word-wrap: break-word; overflow-wrap: break-word; }}
.responses-grid {{ display: grid; grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); gap: 20px; margin-top: 16px;}}
.response-column {{ border: 1px solid #e0e0e0; padding: 16px; border-radius: 8px; background: #f9f9f9; }}
.response-text-container {{ background-color: #fff; padding: 12px; margin-top: 8px; border-radius: 4px; border: 1px solid #eee; white-space: pre-wrap; word-wrap: break-word; max-height: 400px; overflow-y: auto; overflow-wrap: break-word; }}
@@ -1102,10 +1130,34 @@ def _get_comparison_html(eval_result_json: str) -> str:
const promptText = isValEmpty(original_case.prompt_display_text) ? '' : original_case.prompt_display_text;
const promptJson = original_case.prompt_raw_json;
- const agentData = original_case.agent_data;
+ const reference = isValEmpty(original_case.reference) ? '' : original_case.reference;
+
+ let agentData = original_case.agent_data;
+ if (typeof agentData === 'string') {{
+ try {{ agentData = JSON.parse(agentData); }} catch(e) {{}}
+ }}
+
+ let isRefAgentData = false;
+ let refAgentDataObj = null;
+ if (reference) {{
+ try {{
+ let parsed = typeof reference === 'string' ? JSON.parse(reference) : reference;
+ if (parsed && parsed.turns) {{
+ isRefAgentData = true;
+ refAgentDataObj = parsed;
+ }}
+ }} catch(e) {{}}
+ }}
let card = `
Case #${{caseResult.eval_case_index}}
`;
+ if (agentData && agentData.agents && Object.keys(agentData.agents).length > 0) {{
+ card += `
+ System Topology
+ ${{formatSystemTopology(agentData.agents)}}
+ `;
+ }}
+
if (promptText) {{
card += `Prompt:
${{DOMPurify.sanitize(marked.parse(String(promptText)))}}
`;
}}
@@ -1114,25 +1166,39 @@ def _get_comparison_html(eval_result_json: str) -> str:
card += `View Raw Prompt JSON
${{DOMPurify.sanitize(promptJson)}} `;
}}
- if (agentData) {{
- if (typeof agentData === 'string') {{
- try {{ agentData = JSON.parse(agentData); }} catch(e) {{}}
- }}
+ let hasTrace = agentData && agentData.turns;
+ let hasRef = !!reference;
+
+ if (hasTrace || hasRef) {{
+ card += ``;
- if (agentData.agents && Object.keys(agentData.agents).length > 0) {{
- card += `
- System Topology
- ${{formatSystemTopology(agentData.agents)}}
- `;
+ if (hasTrace) {{
+ let traceContent = formatAgentData(agentData);
+ card += `
+
+ Conversation Trace
+ Sequence of multi-agent events across turns
+ ${{traceContent}}
+
+
`;
}}
- if (agentData.turns) {{
- card += `
- Conversation Trace
- Sequence of multi-agent events across turns
- ${{formatAgentData(agentData)}}
- `;
+ if (hasRef) {{
+ card += `
`;
+ if (isRefAgentData) {{
+ let refTraceContent = formatAgentData(refAgentDataObj);
+ card += `
+ Reference
+ Sequence of multi-agent events across turns
+ ${{refTraceContent}}
+ `;
+ }} else {{
+ card += `
Reference
${{DOMPurify.sanitize(marked.parse(String(reference)))}}
`;
+ }}
+ card += `
`;
}}
+
+ card += `
`;
}}
card += ``;