mirror of
https://github.com/microsoft/graphrag.git
synced 2025-08-03 22:32:29 +00:00

* unified search app added to graphrag repository * ignore print statements * update words for unified-search * fix lint errors * fix lint error * fix module name --------- Co-authored-by: Gaudy Blanco <gaudy-microsoft@MacBook-Pro-m4-Gaudy-For-Work.local>
99 lines
3.7 KiB
Python
99 lines
3.7 KiB
Python
# Copyright (c) 2024 Microsoft Corporation.
|
|
# Licensed under the MIT License
|
|
|
|
"""Report details module."""
|
|
|
|
import json
|
|
|
|
import pandas as pd
|
|
import streamlit as st
|
|
from state.session_variables import SessionVariables
|
|
from ui.search import (
|
|
display_graph_citations,
|
|
format_response_hyperlinks,
|
|
get_ids_per_key,
|
|
)
|
|
|
|
|
|
def create_report_details_ui(sv: SessionVariables):
|
|
"""Return report details UI component."""
|
|
if sv.selected_report.value is not None and sv.selected_report.value.empty is False:
|
|
text = ""
|
|
entity_ids = []
|
|
relationship_ids = []
|
|
try:
|
|
report = json.loads(sv.selected_report.value.full_content_json)
|
|
title = report["title"]
|
|
summary = report["summary"]
|
|
rating = report["rating"]
|
|
rating_explanation = report["rating_explanation"]
|
|
findings = report["findings"]
|
|
text += f"#### {title}\n\n{summary}\n\n"
|
|
text += f"**Priority: {rating}**\n\n{rating_explanation}\n\n##### Key Findings\n\n"
|
|
if isinstance(findings, list):
|
|
for finding in findings:
|
|
# extract data for citations
|
|
entity_ids.extend(
|
|
get_ids_per_key(finding["explanation"], "Entities")
|
|
)
|
|
relationship_ids.extend(
|
|
get_ids_per_key(finding["explanation"], "Relationships")
|
|
)
|
|
|
|
formatted_text = format_response_hyperlinks(
|
|
finding["explanation"], "graph"
|
|
)
|
|
text += f"\n\n**{finding['summary']}**\n\n{formatted_text}"
|
|
elif isinstance(findings, str):
|
|
# extract data for citations
|
|
entity_ids.extend(get_ids_per_key(finding["explanation"], "Entities")) # type: ignore
|
|
relationship_ids.extend(
|
|
get_ids_per_key(finding["explanation"], "Relationships") # type: ignore
|
|
)
|
|
|
|
formatted_text = format_response_hyperlinks(findings, "graph")
|
|
text += f"\n\n{formatted_text}"
|
|
|
|
except json.JSONDecodeError:
|
|
st.write("Error parsing report.")
|
|
st.write(sv.selected_report.value.full_content_json)
|
|
text_replacement = (
|
|
text.replace("Entity_Relationships", "Relationships")
|
|
.replace("Entity_Claims", "Claims")
|
|
.replace("Entity_Details", "Entities")
|
|
)
|
|
st.markdown(f"{text_replacement}", unsafe_allow_html=True)
|
|
|
|
# extract entities
|
|
selected_entities = []
|
|
for _index, row in sv.entities.value.iterrows():
|
|
if str(row["human_readable_id"]) in entity_ids:
|
|
selected_entities.append({
|
|
"id": str(row["human_readable_id"]),
|
|
"title": row["title"],
|
|
"description": row["description"],
|
|
})
|
|
|
|
sorted_entities = sorted(selected_entities, key=lambda x: int(x["id"]))
|
|
|
|
# extract relationships
|
|
selected_relationships = []
|
|
for _index, row in sv.relationships.value.iterrows():
|
|
if str(row["human_readable_id"]) in relationship_ids:
|
|
selected_relationships.append({
|
|
"id": str(row["human_readable_id"]),
|
|
"source": row["source"],
|
|
"target": row["target"],
|
|
"description": row["description"],
|
|
})
|
|
|
|
sorted_relationships = sorted(
|
|
selected_relationships, key=lambda x: int(x["id"])
|
|
)
|
|
|
|
display_graph_citations(
|
|
pd.DataFrame(sorted_entities), pd.DataFrame(sorted_relationships), "graph"
|
|
)
|
|
else:
|
|
st.write("No report selected")
|