Skip to content

Commit 7186fae

Browse files
leo-ganErick Friis
and
Erick Friis
authored
API Reference building script update (langchain-ai#13587)
The namespaces like `langchain.agents.format_scratchpad` clogging the API Reference sidebar. This change removes those 3-level namespaces from sidebar (this issue was discussed with @efriis ) --------- Co-authored-by: Erick Friis <[email protected]>
1 parent 76f30f5 commit 7186fae

File tree

2 files changed

+54
-53
lines changed

2 files changed

+54
-53
lines changed

.gitignore

+1-2
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,7 @@ docs/node_modules/
167167
docs/.docusaurus/
168168
docs/.cache-loader/
169169
docs/_dist
170-
docs/api_reference/api_reference.rst
171-
docs/api_reference/experimental_api_reference.rst
170+
docs/api_reference/*api_reference.rst
172171
docs/api_reference/_build
173172
docs/api_reference/*/
174173
!docs/api_reference/_static/

docs/api_reference/create_api_rst.py

+53-51
Original file line numberDiff line numberDiff line change
@@ -196,11 +196,13 @@ def _load_package_modules(
196196
return modules_by_namespace
197197

198198

199-
def _construct_doc(pkg: str, members_by_namespace: Dict[str, ModuleMembers]) -> str:
199+
def _construct_doc(
200+
package_namespace: str, members_by_namespace: Dict[str, ModuleMembers]
201+
) -> str:
200202
"""Construct the contents of the reference.rst file for the given package.
201203
202204
Args:
203-
pkg: The package name
205+
package_namespace: The package top level namespace
204206
members_by_namespace: The members of the package, dict organized by top level
205207
module contains a list of classes and functions
206208
inside of the top level namespace.
@@ -210,7 +212,7 @@ def _construct_doc(pkg: str, members_by_namespace: Dict[str, ModuleMembers]) ->
210212
"""
211213
full_doc = f"""\
212214
=======================
213-
``{pkg}`` API Reference
215+
``{package_namespace}`` API Reference
214216
=======================
215217
216218
"""
@@ -222,13 +224,13 @@ def _construct_doc(pkg: str, members_by_namespace: Dict[str, ModuleMembers]) ->
222224
functions = _members["functions"]
223225
if not (classes or functions):
224226
continue
225-
section = f":mod:`{pkg}.{module}`"
227+
section = f":mod:`{package_namespace}.{module}`"
226228
underline = "=" * (len(section) + 1)
227229
full_doc += f"""\
228230
{section}
229231
{underline}
230232
231-
.. automodule:: {pkg}.{module}
233+
.. automodule:: {package_namespace}.{module}
232234
:no-members:
233235
:no-inherited-members:
234236
@@ -238,7 +240,7 @@ def _construct_doc(pkg: str, members_by_namespace: Dict[str, ModuleMembers]) ->
238240
full_doc += f"""\
239241
Classes
240242
--------------
241-
.. currentmodule:: {pkg}
243+
.. currentmodule:: {package_namespace}
242244
243245
.. autosummary::
244246
:toctree: {module}
@@ -270,7 +272,7 @@ def _construct_doc(pkg: str, members_by_namespace: Dict[str, ModuleMembers]) ->
270272
full_doc += f"""\
271273
Functions
272274
--------------
273-
.. currentmodule:: {pkg}
275+
.. currentmodule:: {package_namespace}
274276
275277
.. autosummary::
276278
:toctree: {module}
@@ -282,57 +284,57 @@ def _construct_doc(pkg: str, members_by_namespace: Dict[str, ModuleMembers]) ->
282284
return full_doc
283285

284286

285-
def _document_langchain_experimental() -> None:
286-
"""Document the langchain_experimental package."""
287-
# Generate experimental_api_reference.rst
288-
exp_members = _load_package_modules(EXP_DIR)
289-
exp_doc = ".. _experimental_api_reference:\n\n" + _construct_doc(
290-
"langchain_experimental", exp_members
291-
)
292-
with open(EXP_WRITE_FILE, "w") as f:
293-
f.write(exp_doc)
287+
def _build_rst_file(package_name: str = "langchain") -> None:
288+
"""Create a rst file for building of documentation.
294289
290+
Args:
291+
package_name: Can be either "langchain" or "core" or "experimental".
292+
"""
293+
package_members = _load_package_modules(_package_dir(package_name))
294+
with open(_out_file_path(package_name), "w") as f:
295+
f.write(
296+
_doc_first_line(package_name)
297+
+ _construct_doc(package_namespace[package_name], package_members)
298+
)
295299

296-
def _document_langchain_core() -> None:
297-
"""Document the langchain_core package."""
298-
# Generate core_api_reference.rst
299-
core_members = _load_package_modules(CORE_DIR)
300-
core_doc = ".. _core_api_reference:\n\n" + _construct_doc(
301-
"langchain_core", core_members
302-
)
303-
with open(CORE_WRITE_FILE, "w") as f:
304-
f.write(core_doc)
305-
306-
307-
def _document_langchain() -> None:
308-
"""Document the main langchain package."""
309-
# load top level module members
310-
lc_members = _load_package_modules(PKG_DIR)
311-
312-
# Add additional packages
313-
tools = _load_package_modules(PKG_DIR, "tools")
314-
agents = _load_package_modules(PKG_DIR, "agents")
315-
schema = _load_package_modules(PKG_DIR, "schema")
316-
317-
lc_members.update(
318-
{
319-
"agents.output_parsers": agents["output_parsers"],
320-
"agents.format_scratchpad": agents["format_scratchpad"],
321-
"tools.render": tools["render"],
322-
}
323-
)
324300

325-
lc_doc = ".. _api_reference:\n\n" + _construct_doc("langchain", lc_members)
301+
package_namespace = {
302+
"langchain": "langchain",
303+
"experimental": "langchain_experimental",
304+
"core": "langchain_core",
305+
}
306+
307+
308+
def _package_dir(package_name: str = "langchain") -> Path:
309+
"""Return the path to the directory containing the documentation."""
310+
return ROOT_DIR / "libs" / package_name / package_namespace[package_name]
311+
312+
313+
def _out_file_path(package_name: str = "langchain") -> Path:
314+
"""Return the path to the file containing the documentation."""
315+
name_prefix = {
316+
"langchain": "",
317+
"experimental": "experimental_",
318+
"core": "core_",
319+
}
320+
return HERE / f"{name_prefix[package_name]}api_reference.rst"
321+
326322

327-
with open(WRITE_FILE, "w") as f:
328-
f.write(lc_doc)
323+
def _doc_first_line(package_name: str = "langchain") -> str:
324+
"""Return the path to the file containing the documentation."""
325+
prefix = {
326+
"langchain": "",
327+
"experimental": "experimental",
328+
"core": "core",
329+
}
330+
return f".. {prefix[package_name]}_api_reference:\n\n"
329331

330332

331333
def main() -> None:
332-
"""Generate the reference.rst file for each package."""
333-
_document_langchain()
334-
_document_langchain_experimental()
335-
_document_langchain_core()
334+
"""Generate the api_reference.rst file for each package."""
335+
_build_rst_file(package_name="core")
336+
_build_rst_file(package_name="langchain")
337+
_build_rst_file(package_name="experimental")
336338

337339

338340
if __name__ == "__main__":

0 commit comments

Comments
 (0)