Skip to content

Commit 4822465

Browse files
fix json parsing logic and warning message (#833)
* fix json parsing logic and warning message * amended warning message --------- Co-authored-by: Alonso Guevara <alonsog@microsoft.com>
1 parent 7b656af commit 4822465

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type": "patch",
3+
"description": "Change json parsing error in the map step of global search to warning"
4+
}

graphrag/query/structured_search/global_search/search.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,9 @@ async def _map_response_single_batch(
192192
# parse search response json
193193
processed_response = self.parse_search_response(search_response)
194194
except ValueError:
195-
log.exception("Error parsing search response json")
195+
log.warning(
196+
"Warning: Error parsing search response json - skipping this batch"
197+
)
196198
processed_response = []
197199

198200
return SearchResult(
@@ -230,15 +232,19 @@ def parse_search_response(self, search_response: str) -> list[dict[str, Any]]:
230232
"""
231233
search_response, _j = try_parse_json_object(search_response)
232234
if _j == {}:
233-
return [{"answer": "not avaliable", "score": 0}]
235+
return [{"answer": "", "score": 0}]
236+
237+
parsed_elements = json.loads(search_response).get("points")
238+
if not parsed_elements or not isinstance(parsed_elements, list):
239+
return [{"answer": "", "score": 0}]
234240

235-
parsed_elements = json.loads(search_response)["points"]
236241
return [
237242
{
238243
"answer": element["description"],
239244
"score": int(element["score"]),
240245
}
241246
for element in parsed_elements
247+
if "description" in element and "score" in element
242248
]
243249

244250
async def _reduce_response(
@@ -277,6 +283,9 @@ async def _reduce_response(
277283

278284
if len(filtered_key_points) == 0 and not self.allow_general_knowledge:
279285
# return no data answer if no key points are found
286+
log.warning(
287+
"Warning: All map responses have score 0 (i.e., no relevant information found from the dataset), returning a canned 'I do not know' answer. You can try enabling `allow_general_knowledge` to encourage the LLM to incorporate relevant general knowledge, at the risk of increasing hallucinations."
288+
)
280289
return SearchResult(
281290
response=NO_DATA_ANSWER,
282291
context_data="",

0 commit comments

Comments
 (0)