docs: build partner api refs (#14675)

This commit is contained in:
Bagatur
2023-12-13 13:37:27 -08:00
committed by GitHub
parent 6c031e0ebf
commit effd000b91
4 changed files with 46 additions and 39 deletions

View File

@@ -1,6 +1,7 @@
"""Script for auto-generating api_reference.rst."""
import importlib
import inspect
import os
import typing
from enum import Enum
from pathlib import Path
@@ -11,14 +12,6 @@ from pydantic import BaseModel
ROOT_DIR = Path(__file__).parents[2].absolute()
HERE = Path(__file__).parent
PKG_DIR = ROOT_DIR / "libs" / "langchain" / "langchain"
EXP_DIR = ROOT_DIR / "libs" / "experimental" / "langchain_experimental"
CORE_DIR = ROOT_DIR / "libs" / "core" / "langchain_core"
COMMUNITY_DIR = ROOT_DIR / "libs" / "core" / "langchain_community"
WRITE_FILE = HERE / "api_reference.rst"
EXP_WRITE_FILE = HERE / "experimental_api_reference.rst"
COMMUNITY_WRITE_FILE = HERE / "community_api_reference.rst"
ClassKind = Literal["TypedDict", "Regular", "Pydantic", "enum"]
@@ -295,51 +288,51 @@ def _build_rst_file(package_name: str = "langchain") -> None:
with open(_out_file_path(package_name), "w") as f:
f.write(
_doc_first_line(package_name)
+ _construct_doc(package_namespace[package_name], package_members)
+ _construct_doc(_package_namespace(package_name), package_members)
)
package_namespace = {
"langchain": "langchain",
"experimental": "langchain_experimental",
"core": "langchain_core",
"community": "langchain_community",
}
def _package_namespace(package_name: str) -> str:
return (
package_name
if package_name == "langchain"
else f"langchain_{package_name.replace('-', '_')}"
)
def _package_dir(package_name: str = "langchain") -> Path:
"""Return the path to the directory containing the documentation."""
return ROOT_DIR / "libs" / package_name / package_namespace[package_name]
if package_name in ("langchain", "experimental", "community", "core", "cli"):
return ROOT_DIR / "libs" / package_name / _package_namespace(package_name)
else:
return (
ROOT_DIR
/ "libs"
/ "partners"
/ package_name
/ _package_namespace(package_name)
)
def _out_file_path(package_name: str = "langchain") -> Path:
"""Return the path to the file containing the documentation."""
name_prefix = {
"langchain": "",
"experimental": "experimental_",
"core": "core_",
"community": "community_",
}
return HERE / f"{name_prefix[package_name]}api_reference.rst"
return HERE / f"{package_name.replace('-', '_')}_api_reference.rst"
def _doc_first_line(package_name: str = "langchain") -> str:
"""Return the path to the file containing the documentation."""
prefix = {
"langchain": "",
"experimental": "experimental",
"core": "core",
"community": "community",
}
return f".. {prefix[package_name]}_api_reference:\n\n"
return f".. {package_name.replace('-', '_')}_api_reference:\n\n"
def main() -> None:
"""Generate the api_reference.rst file for each package."""
_build_rst_file(package_name="core")
_build_rst_file(package_name="langchain")
_build_rst_file(package_name="experimental")
_build_rst_file(package_name="community")
for dir in os.listdir(ROOT_DIR / "libs"):
if dir in ("cli", "partners"):
continue
else:
_build_rst_file(package_name=dir)
for dir in os.listdir(ROOT_DIR / "libs" / "partners"):
_build_rst_file(package_name=dir)
if __name__ == "__main__":