a0c8464e58
Build Package / build (ubuntu-latest) (push) Failing after 1s
CodeQL / Analyze (python) (push) Failing after 1s
Core Typecheck / core-typecheck (push) Failing after 1s
Linting / lint (push) Failing after 1s
llama-dev tests / test-llama-dev (push) Failing after 1s
Publish Sub-Package to PyPI if Needed / publish_subpackage_if_needed (push) Has been skipped
Sync Docs to Developer Hub / sync-docs (push) Failing after 0s
Build Package / build (windows-latest) (push) Has been cancelled
216 lines
7.4 KiB
Python
216 lines
7.4 KiB
Python
# /// script
|
|
# dependencies = [
|
|
# "toml",
|
|
# "pyaml",
|
|
# ]
|
|
# ///
|
|
|
|
import os
|
|
|
|
import toml
|
|
import yaml
|
|
|
|
MKDOCS_YML = "./api_reference/mkdocs.yml"
|
|
|
|
# examples config
|
|
EXAMPLES_DIR = "./examples"
|
|
FOLDER_NAME_TO_LABEL = {
|
|
"./examples/agent": "Agents",
|
|
"./examples/cookbooks": "Cookbooks",
|
|
"./examples/chat_engine": "Chat Engines",
|
|
"./examples/customization": "Customization",
|
|
"./examples/data_connectors": "Data Connectors",
|
|
"./examples/discover_llamaindex": "Discover LlamaIndex",
|
|
"./examples/docstore": "Docstores",
|
|
"./examples/embeddings": "Embeddings",
|
|
"./examples/evaluation": "Evaluation",
|
|
"./examples/finetuning": "Finetuning",
|
|
"./examples/ingestion": "Ingestion",
|
|
"./examples/llama_dataset": "Llama Datasets",
|
|
"./examples/llama_hub": "Llama Hub",
|
|
"./examples/llm": "LLMs",
|
|
"./examples/low_level": "Low Level",
|
|
"./examples/managed": "Managed Indexes",
|
|
"./examples/memory": "Memory",
|
|
"./examples/metadata_extraction": "Metadata Extractors",
|
|
"./examples/multi_modal": "Multi-Modal",
|
|
"./examples/multi_tenancy": "Multi-Tenancy",
|
|
"./examples/node_parsers": "Node Parsers & Text Splitters",
|
|
"./examples/node_postprocessor": "Node Postprocessors",
|
|
"./examples/objects": "Object Stores",
|
|
"./examples/observability": "Observability",
|
|
"./examples/output_parsing": "Output Parsers",
|
|
"./examples/param_optimizer": "Param Optimizer",
|
|
"./examples/pipeline": "Query Pipeline",
|
|
"./examples/prompts": "Prompts",
|
|
"./examples/query_engine": "Query Engines",
|
|
"./examples/query_transformations": "Query Transformations",
|
|
"./examples/response_synthesizers": "Response Synthesizers",
|
|
"./examples/retrievers": "Retrievers",
|
|
"./examples/tools": "Tools",
|
|
"./examples/transforms": "Transforms",
|
|
"./examples/usecases": "Use Cases",
|
|
"./examples/vector_stores": "Vector Stores",
|
|
"./examples/workflow": "Workflow",
|
|
}
|
|
|
|
# integration config
|
|
INTEGRATION_FOLDERS = [
|
|
# "../llama-index-networks",
|
|
# "../llama-index-finetuning",
|
|
"../llama-index-packs",
|
|
"../llama-index-integrations",
|
|
# "../llama-index-cli",
|
|
]
|
|
EXCLUDED_INTEGRATION_FOLDERS = [
|
|
"llama-index-integrations/agent",
|
|
]
|
|
INTEGRATION_FOLDER_TO_LABEL = {
|
|
"finetuning": "Fine-tuning",
|
|
"llms": "LLMs",
|
|
"agent": "Agents",
|
|
"callbacks": "Callbacks",
|
|
"chat_engines": "Chat Engines",
|
|
"embeddings": "Embeddings",
|
|
"evaluation": "Evaluation",
|
|
"extractors": "Metadata Extractors",
|
|
"graph_rag": "Graph RAG",
|
|
"indices": "Indexes",
|
|
"ingestion": "Ingestion",
|
|
"instrumentation": "Instrumentation",
|
|
"llama_dataset": "Llama Datasets",
|
|
"packs": "Llama Packs",
|
|
"memory": "Memory",
|
|
"multi_modal_llms": "Multi-Modal LLMs",
|
|
"node_parsers": "Node Parsers & Text Splitters",
|
|
"node_parser": "Node Parsers & Text Splitters",
|
|
"objects": "Object Stores",
|
|
"observability": "Observability",
|
|
"output_parsers": "Output Parsers",
|
|
"postprocessor": "Node Postprocessors",
|
|
"program": "Programs",
|
|
"prompts": "Prompts",
|
|
"query_engine": "Query Engines",
|
|
"query_pipeline": "Query Pipeline",
|
|
"question_gen": "Question Generators",
|
|
"protocols": "Protocols",
|
|
"readers": "Readers",
|
|
"response_synthesizers": "Response Synthesizers",
|
|
"retrievers": "Retrievers",
|
|
"schema": "Schema",
|
|
"selectors": "Selectors",
|
|
"sparse_embeddings": "Sparse Embeddings",
|
|
"storage": "Storage",
|
|
"tools": "Tools",
|
|
"workflow": "Workflow",
|
|
"llama_deploy": "LlamaDeploy",
|
|
"message_queues": "Message Queues",
|
|
"voice_agents": "Voice Agents",
|
|
}
|
|
API_REF_TEMPLATE = """::: {import_path}
|
|
options:
|
|
members:
|
|
{members}
|
|
"""
|
|
API_REF_MEMBER_TEMPLATE = """ - {member}"""
|
|
|
|
|
|
def main():
|
|
with open(MKDOCS_YML) as f:
|
|
mkdocs = yaml.safe_load(f)
|
|
|
|
# find all pyproject.toml files in the integration folders
|
|
# each toml file has a toml['tool']['llamahub']['import_path'] key that we need
|
|
# toml['tool']['llamahub']['class_authors'] contains a list of exposed classes
|
|
# For each class, we need to create an API reference page
|
|
search_paths = []
|
|
for folder in INTEGRATION_FOLDERS:
|
|
for root, dirs, files in os.walk(folder):
|
|
if ".venv" in root:
|
|
continue
|
|
for file in files:
|
|
# check if the current root is in the excluded integration folders
|
|
if any(
|
|
excluded_folder in root
|
|
for excluded_folder in EXCLUDED_INTEGRATION_FOLDERS
|
|
):
|
|
continue
|
|
|
|
if file == "pyproject.toml":
|
|
toml_path = os.path.join(root, file)
|
|
if ".venv" in toml_path:
|
|
continue
|
|
|
|
with open(toml_path) as f:
|
|
toml_data = toml.load(f)
|
|
|
|
import_path = toml_data["tool"]["llamahub"]["import_path"]
|
|
class_authors = toml_data["tool"]["llamahub"][
|
|
"class_authors"
|
|
]
|
|
members = "\n".join(
|
|
[
|
|
API_REF_MEMBER_TEMPLATE.format(member=member)
|
|
for member in class_authors
|
|
]
|
|
)
|
|
api_ref = API_REF_TEMPLATE.format(
|
|
import_path=import_path, members=members
|
|
)
|
|
|
|
folder_name = "/".join(import_path.split(".")[1:-1])
|
|
search_paths.append(os.path.join("../", root))
|
|
# special cases
|
|
if folder_name == "vector_stores":
|
|
folder_name = "storage/vector_store"
|
|
elif folder_name == "indices/managed":
|
|
folder_name = "indices"
|
|
elif folder_name == "graph_stores":
|
|
folder_name = "storage/graph_stores"
|
|
|
|
full_path = os.path.join(
|
|
"./api_reference/api_reference", folder_name
|
|
)
|
|
module_name = import_path.split(".")[-1] + ".md"
|
|
os.makedirs(full_path, exist_ok=True)
|
|
with open(os.path.join(full_path, module_name), "w") as f:
|
|
f.write(api_ref)
|
|
|
|
# update search paths
|
|
for i, plugin in enumerate(mkdocs["plugins"]):
|
|
if "mkdocstrings" in plugin:
|
|
for search_path in search_paths:
|
|
if (
|
|
search_path
|
|
not in mkdocs["plugins"][i]["mkdocstrings"]["handlers"][
|
|
"python"
|
|
]["paths"]
|
|
):
|
|
mkdocs["plugins"][i]["mkdocstrings"]["handlers"]["python"][
|
|
"paths"
|
|
].append(search_path)
|
|
|
|
# write the updated mkdocs.yml
|
|
with open(MKDOCS_YML, "w") as f:
|
|
yaml.dump(mkdocs, f)
|
|
|
|
# copy over extra files
|
|
os.system("cp ../CHANGELOG.md ./src/content/docs/framework/CHANGELOG.md")
|
|
|
|
# Ensure CHANGELOG had the proper astro header
|
|
changelog_contents = ""
|
|
with open("./src/content/docs/framework/CHANGELOG.md", "r") as f:
|
|
changelog_contents = f.read()
|
|
|
|
astro_header = "---\ntitle: ChangeLog\n---"
|
|
changelog_contents = changelog_contents.replace(
|
|
"# ChangeLog\n", astro_header
|
|
)
|
|
|
|
with open("./src/content/docs/framework/CHANGELOG.md", "w") as f:
|
|
f.write(changelog_contents)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|