diff --git a/python/packages/core/agent_framework/_docstrings.py b/python/packages/core/agent_framework/_docstrings.py index 93854b4627a..4883a02d5cc 100644 --- a/python/packages/core/agent_framework/_docstrings.py +++ b/python/packages/core/agent_framework/_docstrings.py @@ -92,11 +92,23 @@ def build_layered_docstring( insert_index = _find_next_section_index(lines, args_index + 1) else: insert_index = _find_next_section_index(lines, 0) - lines[insert_index:insert_index] = ["", "Keyword Args:", *formatted_keyword_arg_lines] + insertion: list[str] = [] + if insert_index > 0 and lines[insert_index - 1] != "": + insertion.append("") + insertion.append("Keyword Args:") + insertion.extend(formatted_keyword_arg_lines) + if insert_index < len(lines) and lines[insert_index] != "": + insertion.append("") + lines[insert_index:insert_index] = insertion return "\n".join(lines).rstrip() insert_index = _find_next_section_index(lines, keyword_args_index + 1) + while insert_index > keyword_args_index + 1 and lines[insert_index - 1] == "": + insert_index -= 1 lines[insert_index:insert_index] = formatted_keyword_arg_lines + after_index = insert_index + len(formatted_keyword_arg_lines) + if after_index < len(lines) and lines[after_index] != "": + lines.insert(after_index, "") return "\n".join(lines).rstrip() diff --git a/python/packages/core/tests/core/test_docstrings.py b/python/packages/core/tests/core/test_docstrings.py index 8ec3b2ee7ce..9b4426fc26b 100644 --- a/python/packages/core/tests/core/test_docstrings.py +++ b/python/packages/core/tests/core/test_docstrings.py @@ -86,7 +86,10 @@ def test_build_appends_to_existing_keyword_args_section() -> None: kw_index = next(i for i, line in enumerate(lines) if line == "Keyword Args:") ret_index = next(i for i, line in enumerate(lines) if line == "Returns:") retries_index = next(i for i, line in enumerate(lines) if "retries:" in line) + timeout_index = next(i for i, line in enumerate(lines) if "timeout:" in line) assert kw_index < retries_index < ret_index + assert retries_index == timeout_index + 1 + assert lines[ret_index - 1] == "" def test_build_inserts_keyword_args_after_args_section() -> None: @@ -102,6 +105,9 @@ def test_build_inserts_keyword_args_after_args_section() -> None: kw_index = next(i for i, line in enumerate(lines) if line == "Keyword Args:") ret_index = next(i for i, line in enumerate(lines) if line == "Returns:") assert args_index < kw_index < ret_index + assert lines[kw_index - 1] == "" + assert lines[kw_index - 2] != "" + assert lines[ret_index - 1] == "" def test_build_inserts_keyword_args_in_docstring_with_no_sections() -> None: