mirror of
https://github.com/hwchase17/langchain.git
synced 2025-04-29 12:25:37 +00:00
This way we can document APIs in methods signature only where they are checked by the typing system and we get them also in the param description without having to duplicate in the docstrings (where they are unchecked). Twitter: @cbornet_
177 lines
5.9 KiB
Python
177 lines
5.9 KiB
Python
"""Configuration file for the Sphinx documentation builder."""
|
|
# Configuration file for the Sphinx documentation builder.
|
|
#
|
|
# This file only contains a selection of the most common options. For a full
|
|
# list see the documentation:
|
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html
|
|
|
|
# -- Path setup --------------------------------------------------------------
|
|
|
|
import json
|
|
import os
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
import toml
|
|
from docutils import nodes
|
|
from sphinx.util.docutils import SphinxDirective
|
|
|
|
# If extensions (or modules to document with autodoc) are in another directory,
|
|
# add these directories to sys.path here. If the directory is relative to the
|
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
|
|
|
_DIR = Path(__file__).parent.absolute()
|
|
sys.path.insert(0, os.path.abspath("."))
|
|
sys.path.insert(0, os.path.abspath("../../libs/langchain"))
|
|
sys.path.insert(0, os.path.abspath("../../libs/experimental"))
|
|
|
|
with (_DIR.parents[1] / "libs" / "langchain" / "pyproject.toml").open("r") as f:
|
|
data = toml.load(f)
|
|
with (_DIR / "guide_imports.json").open("r") as f:
|
|
imported_classes = json.load(f)
|
|
|
|
|
|
class ExampleLinksDirective(SphinxDirective):
|
|
"""Directive to generate a list of links to examples.
|
|
|
|
We have a script that extracts links to API reference docs
|
|
from our notebook examples. This directive uses that information
|
|
to backlink to the examples from the API reference docs."""
|
|
|
|
has_content = False
|
|
required_arguments = 1
|
|
|
|
def run(self):
|
|
"""Run the directive.
|
|
|
|
Called any time :example_links:`ClassName` is used
|
|
in the template *.rst files."""
|
|
class_or_func_name = self.arguments[0]
|
|
links = imported_classes.get(class_or_func_name, {})
|
|
list_node = nodes.bullet_list()
|
|
for doc_name, link in links.items():
|
|
item_node = nodes.list_item()
|
|
para_node = nodes.paragraph()
|
|
link_node = nodes.reference()
|
|
link_node["refuri"] = link
|
|
link_node.append(nodes.Text(doc_name))
|
|
para_node.append(link_node)
|
|
item_node.append(para_node)
|
|
list_node.append(item_node)
|
|
if list_node.children:
|
|
title_node = nodes.title()
|
|
title_node.append(nodes.Text(f"Examples using {class_or_func_name}"))
|
|
return [title_node, list_node]
|
|
return [list_node]
|
|
|
|
|
|
def setup(app):
|
|
app.add_directive("example_links", ExampleLinksDirective)
|
|
|
|
|
|
# -- Project information -----------------------------------------------------
|
|
|
|
project = "🦜🔗 LangChain"
|
|
copyright = "2023, LangChain, Inc."
|
|
author = "LangChain, Inc."
|
|
|
|
version = data["tool"]["poetry"]["version"]
|
|
release = version
|
|
|
|
html_title = project + " " + version
|
|
html_last_updated_fmt = "%b %d, %Y"
|
|
|
|
|
|
# -- General configuration ---------------------------------------------------
|
|
|
|
# Add any Sphinx extension module names here, as strings. They can be
|
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
|
# ones.
|
|
extensions = [
|
|
"sphinx.ext.autodoc",
|
|
"sphinx.ext.autodoc.typehints",
|
|
"sphinx.ext.autosummary",
|
|
"sphinx.ext.napoleon",
|
|
"sphinx.ext.viewcode",
|
|
"sphinxcontrib.autodoc_pydantic",
|
|
"sphinx_copybutton",
|
|
"sphinx_panels",
|
|
"IPython.sphinxext.ipython_console_highlighting",
|
|
]
|
|
source_suffix = [".rst"]
|
|
|
|
# some autodoc pydantic options are repeated in the actual template.
|
|
# potentially user error, but there may be bugs in the sphinx extension
|
|
# with options not being passed through correctly (from either the location in the code)
|
|
autodoc_pydantic_model_show_json = False
|
|
autodoc_pydantic_field_list_validators = False
|
|
autodoc_pydantic_config_members = False
|
|
autodoc_pydantic_model_show_config_summary = False
|
|
autodoc_pydantic_model_show_validator_members = False
|
|
autodoc_pydantic_model_show_validator_summary = False
|
|
autodoc_pydantic_model_signature_prefix = "class"
|
|
autodoc_pydantic_field_signature_prefix = "param"
|
|
autodoc_member_order = "groupwise"
|
|
autoclass_content = "both"
|
|
autodoc_typehints_format = "short"
|
|
autodoc_typehints = "both"
|
|
|
|
# Add any paths that contain templates here, relative to this directory.
|
|
templates_path = ["templates"]
|
|
|
|
# List of patterns, relative to source directory, that match files and
|
|
# directories to ignore when looking for source files.
|
|
# This pattern also affects html_static_path and html_extra_path.
|
|
exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
|
|
|
|
|
|
# -- Options for HTML output -------------------------------------------------
|
|
|
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
|
# a list of builtin themes.
|
|
#
|
|
html_theme = "scikit-learn-modern"
|
|
html_theme_path = ["themes"]
|
|
|
|
# redirects dictionary maps from old links to new links
|
|
html_additional_pages = {}
|
|
redirects = {
|
|
"index": "langchain_api_reference",
|
|
}
|
|
for old_link in redirects:
|
|
html_additional_pages[old_link] = "redirects.html"
|
|
|
|
partners_dir = Path(__file__).parent.parent.parent / "libs/partners"
|
|
partners = [
|
|
(p.name, p.name.replace("-", "_") + "_api_reference")
|
|
for p in partners_dir.iterdir()
|
|
]
|
|
partners = sorted(partners)
|
|
|
|
html_context = {
|
|
"display_github": True, # Integrate GitHub
|
|
"github_user": "langchain-ai", # Username
|
|
"github_repo": "langchain", # Repo name
|
|
"github_version": "master", # Version
|
|
"conf_py_path": "/docs/api_reference", # Path in the checkout to the docs root
|
|
"redirects": redirects,
|
|
"partners": partners,
|
|
}
|
|
|
|
# Add any paths that contain custom static files (such as style sheets) here,
|
|
# relative to this directory. They are copied after the builtin static files,
|
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
|
html_static_path = ["_static"]
|
|
|
|
# These paths are either relative to html_static_path
|
|
# or fully qualified paths (e.g. https://...)
|
|
html_css_files = [
|
|
"css/custom.css",
|
|
]
|
|
html_use_index = False
|
|
|
|
myst_enable_extensions = ["colon_fence"]
|
|
|
|
# generate autosummary even if no references
|
|
autosummary_generate = True
|