kotaemon/knowledgehub/contribs/docs.py
Nguyen Trung Duc (john) 0a3fc4b228 Correct the use of abstractmethod (#80)
* Correct abstractmethod usage

* Update interface

* Specify minimal llama-index version [ignore cache]

* Update examples
2023-11-20 11:18:53 +07:00

67 lines
2.2 KiB
Python

import inspect
from collections import defaultdict
from theflow.utils.documentation import get_function_documentation_from_module
def from_definition_to_markdown(definition: dict) -> str:
"""From definition to markdown"""
# Handle params
params = " N/A\n"
if definition["params"]:
params = "\n| Name | Description | Type | Default |\n"
params += "| --- | --- | --- | --- |\n"
for name, p in definition["params"].items():
type_ = p["type"].__name__ if inspect.isclass(p["type"]) else p["type"]
params += f"| {name} | {p['desc']} | {type_} | {p['default']} |\n"
# Handle nodes
nodes = " N/A\n"
if definition["nodes"]:
nodes = "\n| Name | Description | Type | Input | Output |\n"
nodes += "| --- | --- | --- | --- | --- |\n"
for name, n in definition["nodes"].items():
type_ = n["type"].__name__ if inspect.isclass(n["type"]) else str(n["type"])
input_ = (
n["input"].__name__ if inspect.isclass(n["input"]) else str(n["input"])
)
output_ = (
n["output"].__name__
if inspect.isclass(n["output"])
else str(n["output"])
)
nodes += f"|{name}|{n['desc']}|{type_}|{input_}|{output_}|\n"
description = inspect.cleandoc(definition["desc"])
return f"{description}\n\n_**Params:**_{params}\n_**Nodes:**_{nodes}"
def make_doc(module: str, output: str, separation_level: int):
"""Run exporting components to markdown
Args:
module (str): module name
output_path (str): output path to save
separation_level (int): level of separation
"""
documentation = sorted(
get_function_documentation_from_module(module).items(), key=lambda x: x[0]
)
entries = defaultdict(list)
for name, definition in documentation:
section = name.split(".")[separation_level].capitalize()
cls_name = name.split(".")[-1]
markdown = from_definition_to_markdown(definition)
entries[section].append(f"### {cls_name}\n{markdown}")
final = "\n".join(
[f"## {section}\n" + "\n".join(entries[section]) for section in entries]
)
with open(output, "w") as f:
f.write(final)