Skip to content

Commit

Permalink
Add example scripts to documentation (vllm-project#4225)
Browse files Browse the repository at this point in the history
Co-authored-by: Harry Mellor <[email protected]>
  • Loading branch information
2 people authored and jimpang committed Apr 25, 2024
1 parent 0f842cd commit fe29f22
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 1 deletion.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ instance/

# Sphinx documentation
docs/_build/
docs/source/getting_started/examples/*.rst
!**/*.template.rst

# PyBuilder
.pybuilder/
Expand Down
9 changes: 8 additions & 1 deletion docs/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
# 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: List[str] = []
exclude_patterns: List[str] = ["**/*.template.rst"]

# Exclude the prompt "$" when copying code
copybutton_prompt_text = r"\$ "
Expand All @@ -73,6 +73,13 @@
# so a file named "default.css" will overwrite the builtin "default.css".
# html_static_path = ['_static']


# Generate additional rst documentation here.
def setup(app):
from docs.source.generate_examples import generate_examples
generate_examples()


# Mock out external dependencies here.
autodoc_mock_imports = [
"cpuinfo",
Expand Down
61 changes: 61 additions & 0 deletions docs/source/generate_examples.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import re
from pathlib import Path


def fix_case(text: str) -> str:
subs = [
("api", "API"),
("llm", "LLM"),
("vllm", "vLLM"),
("openai", "OpenAI"),
("multilora", "MultiLoRA"),
]
for sub in subs:
text = re.sub(*sub, text, flags=re.IGNORECASE)
return text


def underline(title: str, character: str = "=") -> str:
return f"{title}\n{character * len(title)}"


def generate_title(filename: str) -> str:
# Turn filename into a title
title = filename.replace("_", " ").title()
# Handle acronyms and names
title = fix_case(title)
# Underline title
title = underline(title)
return title


def generate_examples():
root_dir = Path(__file__).parent.parent.parent.resolve()

# Source paths
script_dir = root_dir / "examples"
script_paths = sorted(script_dir.glob("*.py"))

# Destination paths
doc_dir = root_dir / "docs/source/getting_started/examples"
doc_paths = [doc_dir / f"{path.stem}.rst" for path in script_paths]

# Generate the example docs for each example script
for script_path, doc_path in zip(script_paths, doc_paths):
script_url = f"https://github.com/vllm-project/vllm/blob/main/examples/{script_path.name}"
# Make script_path relative to doc_path and call it include_path
include_path = '../../../..' / script_path.relative_to(root_dir)
content = (f"{generate_title(doc_path.stem)}\n\n"
f"Source {script_url}.\n\n"
f".. literalinclude:: {include_path}\n"
" :language: python\n"
" :linenos:\n")
with open(doc_path, "w+") as f:
f.write(content)

# Generate the toctree for the example scripts
with open(doc_dir / "examples_index.template.rst") as f:
examples_index = f.read()
with open(doc_dir / "examples_index.rst", "w+") as f:
example_docs = "\n ".join(path.stem for path in script_paths)
f.write(examples_index.replace(r"%EXAMPLE_DOCS%", example_docs))
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Examples
=================================

.. toctree::
:maxdepth: 1
:caption: Scripts

%EXAMPLE_DOCS%
1 change: 1 addition & 0 deletions docs/source/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ Documentation
getting_started/neuron-installation
getting_started/cpu-installation
getting_started/quickstart
getting_started/examples/examples_index

.. toctree::
:maxdepth: 1
Expand Down
File renamed without changes.

0 comments on commit fe29f22

Please sign in to comment.