diff --git a/libs/core/langchain_core/utils/json.py b/libs/core/langchain_core/utils/json.py index 4b12e85fe99..abff2538a9f 100644 --- a/libs/core/langchain_core/utils/json.py +++ b/libs/core/langchain_core/utils/json.py @@ -187,6 +187,11 @@ def parse_and_check_json_markdown(text: str, expected_keys: list[str]) -> dict: except json.JSONDecodeError as e: msg = f"Got invalid JSON object. Error: {e}" raise OutputParserException(msg) from e + if not isinstance(json_obj, dict): + raise OutputParserException( + f"Expected JSON object (dict), but got: {type(json_obj).__name__}. Raw content: {json_obj}", + llm_output=text + ) for key in expected_keys: if key not in json_obj: msg = ( diff --git a/libs/core/tests/unit_tests/output_parsers/test_json.py b/libs/core/tests/unit_tests/output_parsers/test_json.py index 4198a467143..4fdcaf60645 100644 --- a/libs/core/tests/unit_tests/output_parsers/test_json.py +++ b/libs/core/tests/unit_tests/output_parsers/test_json.py @@ -5,7 +5,10 @@ from typing import Any import pytest from pydantic import BaseModel, Field +# Removed incorrect import of parse_and_check_json_markdown from langchain_core.exceptions import OutputParserException + + from langchain_core.output_parsers.json import ( SimpleJsonOutputParser, ) @@ -210,6 +213,13 @@ def test_parse_json_with_code_blocks_and_newlines() -> None: "action_input": '```bar\n