mirror of
https://github.com/hwchase17/langchain
synced 2024-11-06 03:20:49 +00:00
docs: Update clean up API reference (#23221)
- Fix bug with TypedDicts rendering inherited methods if inherting from typing_extensions.TypedDict rather than typing.TypedDict - Do not surface inherited pydantic methods for subclasses of BaseModel - Subclasses of RunnableSerializable will not how methods inherited from Runnable or from BaseModel - Subclasses of Runnable that not pydantic models will include a link to RunnableInterface (they still show inherited methods, we can fix this later)
This commit is contained in:
parent
51e75cf59d
commit
61daa16e5d
@ -10,12 +10,21 @@ from pathlib import Path
|
|||||||
from typing import Dict, List, Literal, Optional, Sequence, TypedDict, Union
|
from typing import Dict, List, Literal, Optional, Sequence, TypedDict, Union
|
||||||
|
|
||||||
import toml
|
import toml
|
||||||
|
import typing_extensions
|
||||||
|
from langchain_core.runnables import Runnable, RunnableSerializable
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
|
|
||||||
ROOT_DIR = Path(__file__).parents[2].absolute()
|
ROOT_DIR = Path(__file__).parents[2].absolute()
|
||||||
HERE = Path(__file__).parent
|
HERE = Path(__file__).parent
|
||||||
|
|
||||||
ClassKind = Literal["TypedDict", "Regular", "Pydantic", "enum"]
|
ClassKind = Literal[
|
||||||
|
"TypedDict",
|
||||||
|
"Regular",
|
||||||
|
"Pydantic",
|
||||||
|
"enum",
|
||||||
|
"RunnablePydantic",
|
||||||
|
"RunnableNonPydantic",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class ClassInfo(TypedDict):
|
class ClassInfo(TypedDict):
|
||||||
@ -69,8 +78,36 @@ def _load_module_members(module_path: str, namespace: str) -> ModuleMembers:
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
if inspect.isclass(type_):
|
if inspect.isclass(type_):
|
||||||
if type(type_) == typing._TypedDictMeta: # type: ignore
|
# The clasification of the class is used to select a template
|
||||||
|
# for the object when rendering the documentation.
|
||||||
|
# See `templates` directory for defined templates.
|
||||||
|
# This is a hacky solution to distinguish between different
|
||||||
|
# kinds of thing that we want to render.
|
||||||
|
if type(type_) is typing_extensions._TypedDictMeta: # type: ignore
|
||||||
kind: ClassKind = "TypedDict"
|
kind: ClassKind = "TypedDict"
|
||||||
|
elif type(type_) is typing._TypedDictMeta: # type: ignore
|
||||||
|
kind: ClassKind = "TypedDict"
|
||||||
|
elif (
|
||||||
|
issubclass(type_, Runnable)
|
||||||
|
and issubclass(type_, BaseModel)
|
||||||
|
and type_ is not Runnable
|
||||||
|
):
|
||||||
|
# RunnableSerializable subclasses from Pydantic which
|
||||||
|
# for which we use autodoc_pydantic for rendering.
|
||||||
|
# We need to distinguish these from regular Pydantic
|
||||||
|
# classes so we can hide inherited Runnable methods
|
||||||
|
# and provide a link to the Runnable interface from
|
||||||
|
# the template.
|
||||||
|
kind = "RunnablePydantic"
|
||||||
|
elif (
|
||||||
|
issubclass(type_, Runnable)
|
||||||
|
and not issubclass(type_, BaseModel)
|
||||||
|
and type_ is not Runnable
|
||||||
|
):
|
||||||
|
# These are not pydantic classes but are Runnable.
|
||||||
|
# We'll hide all the inherited methods from Runnable
|
||||||
|
# but use a regular class template to render.
|
||||||
|
kind = "RunnableNonPydantic"
|
||||||
elif issubclass(type_, Enum):
|
elif issubclass(type_, Enum):
|
||||||
kind = "enum"
|
kind = "enum"
|
||||||
elif issubclass(type_, BaseModel):
|
elif issubclass(type_, BaseModel):
|
||||||
@ -251,6 +288,10 @@ Classes
|
|||||||
template = "enum.rst"
|
template = "enum.rst"
|
||||||
elif class_["kind"] == "Pydantic":
|
elif class_["kind"] == "Pydantic":
|
||||||
template = "pydantic.rst"
|
template = "pydantic.rst"
|
||||||
|
elif class_["kind"] == "RunnablePydantic":
|
||||||
|
template = "runnable_pydantic.rst"
|
||||||
|
elif class_["kind"] == "RunnableNonPydantic":
|
||||||
|
template = "runnable_non_pydantic.rst"
|
||||||
else:
|
else:
|
||||||
template = "class.rst"
|
template = "class.rst"
|
||||||
|
|
||||||
|
@ -15,6 +15,8 @@
|
|||||||
:member-order: groupwise
|
:member-order: groupwise
|
||||||
:show-inheritance: True
|
:show-inheritance: True
|
||||||
:special-members: __call__
|
:special-members: __call__
|
||||||
|
:exclude-members: construct, copy, dict, from_orm, parse_file, parse_obj, parse_raw, schema, schema_json, update_forward_refs, validate, json, is_lc_serializable, to_json, to_json_not_implemented, lc_secrets, lc_attributes, lc_id, get_lc_namespace
|
||||||
|
|
||||||
|
|
||||||
{% block attributes %}
|
{% block attributes %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
39
docs/api_reference/templates/runnable_non_pydantic.rst
Normal file
39
docs/api_reference/templates/runnable_non_pydantic.rst
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
:mod:`{{module}}`.{{objname}}
|
||||||
|
{{ underline }}==============
|
||||||
|
|
||||||
|
.. NOTE:: {{objname}} implements the standard :py:class:`Runnable Interface <langchain_core.runnables.base.Runnable>`. 🏃
|
||||||
|
|
||||||
|
|
||||||
|
.. currentmodule:: {{ module }}
|
||||||
|
|
||||||
|
.. autoclass:: {{ objname }}
|
||||||
|
|
||||||
|
{% block attributes %}
|
||||||
|
{% if attributes %}
|
||||||
|
.. rubric:: {{ _('Attributes') }}
|
||||||
|
|
||||||
|
.. autosummary::
|
||||||
|
{% for item in attributes %}
|
||||||
|
~{{ name }}.{{ item }}
|
||||||
|
{%- endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block methods %}
|
||||||
|
{% if methods %}
|
||||||
|
.. rubric:: {{ _('Methods') }}
|
||||||
|
|
||||||
|
.. autosummary::
|
||||||
|
{% for item in methods %}
|
||||||
|
~{{ name }}.{{ item }}
|
||||||
|
{%- endfor %}
|
||||||
|
|
||||||
|
{% for item in methods %}
|
||||||
|
.. automethod:: {{ name }}.{{ item }}
|
||||||
|
{%- endfor %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
.. example_links:: {{ objname }}
|
22
docs/api_reference/templates/runnable_pydantic.rst
Normal file
22
docs/api_reference/templates/runnable_pydantic.rst
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
:mod:`{{module}}`.{{objname}}
|
||||||
|
{{ underline }}==============
|
||||||
|
|
||||||
|
.. NOTE:: {{objname}} implements the standard :py:class:`Runnable Interface <langchain_core.runnables.base.Runnable>`. 🏃
|
||||||
|
|
||||||
|
.. currentmodule:: {{ module }}
|
||||||
|
|
||||||
|
.. autopydantic_model:: {{ objname }}
|
||||||
|
:model-show-json: False
|
||||||
|
:model-show-config-summary: False
|
||||||
|
:model-show-validator-members: False
|
||||||
|
:model-show-field-summary: False
|
||||||
|
:field-signature-prefix: param
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:inherited-members:
|
||||||
|
:member-order: groupwise
|
||||||
|
:show-inheritance: True
|
||||||
|
:special-members: __call__
|
||||||
|
:exclude-members: construct, copy, dict, from_orm, parse_file, parse_obj, parse_raw, schema, schema_json, update_forward_refs, validate, json, is_lc_serializable, to_json, to_json_not_implemented, lc_secrets, lc_attributes, lc_id, get_lc_namespace, invoke, ainvoke, batch, abatch, batch_as_completed, abatch_as_completed, astream_log, stream, astream, astream_events, transform, atransform, get_output_schema, get_prompts, configurable_fields, configurable_alternatives, config_schema, map, pick, pipe, with_listeners, with_alisteners, with_config, with_fallbacks, with_types, with_retry, InputType, OutputType, config_specs, output_schema, get_input_schema, get_graph, get_name, input_schema, name, bind, assign
|
||||||
|
|
||||||
|
.. example_links:: {{ objname }}
|
Loading…
Reference in New Issue
Block a user