* Correct abstractmethod usage * Update interface * Specify minimal llama-index version [ignore cache] * Update examples
67 lines
2.2 KiB
Python
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)
|