diff --git a/pydantic_ai_slim/pydantic_ai/_utils.py b/pydantic_ai_slim/pydantic_ai/_utils.py index 6fc8a080ec..5fe66d0b50 100644 --- a/pydantic_ai_slim/pydantic_ai/_utils.py +++ b/pydantic_ai_slim/pydantic_ai/_utils.py @@ -461,12 +461,10 @@ def validate_empty_kwargs(_kwargs: dict[str, Any]) -> None: def strip_markdown_fences(text: str) -> str: if text.startswith('{'): return text - - regex = r'```(?:\w+)?\n(\{.*\})\n```' + regex = r'```(?:\w+)?\s*(\{.*\})\s*```' match = re.search(regex, text, re.DOTALL) if match: - return match.group(1) - + return match.group(1).strip() return text diff --git a/tests/test_utils.py b/tests/test_utils.py index 4ffbb64832..2bbd20ea5b 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -505,6 +505,15 @@ def test_strip_markdown_fences(): ) assert strip_markdown_fences('No JSON to be found') == 'No JSON to be found' + assert strip_markdown_fences('```json {"foo": "bar"}```') == '{"foo": "bar"}' + assert strip_markdown_fences('```json\n\n{"foo": "bar"}\n\n```') == '{"foo": "bar"}' + assert strip_markdown_fences('```\n{"foo": "bar"}```') == '{"foo": "bar"}' + assert strip_markdown_fences('```json \n{"foo": "bar"}\n ```') == '{"foo": "bar"}' + assert ( + strip_markdown_fences('```json\n{"foo": "bar"}\n```\nSome text\n```json\n{"baz": "qux"}\n```') + == '{"foo": "bar"}\n```\nSome text\n```json\n{"baz": "qux"}' + ) + def test_validate_empty_kwargs_empty(): """Test that empty dict passes validation."""