- Updates the `arcade docs` templates, dir/file paths, and URL paths to reflect the new docs repo structure - References "MCP Server" instead of "toolkit" - Auto-detects when it's a Starter MCP server and adds the corresponding warning in the main doc page - Fixes a bug that generated the wrong file path to the Python & JS examples when the package name had an underscore character) - Introduces some minor improvements, such as pulling the MCP Server description for `ToolInfo` from the package `pyproject.toml`, instead of a standard description varying only the MCP Server name --------- Co-authored-by: Eric Gustin <34000337+EricGustin@users.noreply.github.com>
85 lines
2.6 KiB
Python
85 lines
2.6 KiB
Python
from functools import partial
|
|
|
|
import openai
|
|
from rich.console import Console
|
|
|
|
from arcade_cli.toolkit_docs.docs_builder import (
|
|
build_example_path,
|
|
build_examples,
|
|
build_toolkit_mdx,
|
|
build_toolkit_mdx_file_path,
|
|
)
|
|
from arcade_cli.toolkit_docs.utils import (
|
|
get_all_enumerations,
|
|
get_list_of_tools,
|
|
has_wrapper_tools_directory,
|
|
print_debug_func,
|
|
read_toolkit_metadata,
|
|
resolve_api_key,
|
|
standardize_dir_path,
|
|
write_file,
|
|
)
|
|
|
|
|
|
def generate_toolkit_docs(
|
|
console: Console,
|
|
toolkit_name: str,
|
|
toolkit_dir: str,
|
|
docs_section: str,
|
|
docs_dir: str,
|
|
openai_model: str,
|
|
openai_api_key: str | None = None,
|
|
tool_call_examples: bool = True,
|
|
debug: bool = False,
|
|
) -> bool:
|
|
openai.api_key = resolve_api_key(openai_api_key, "OPENAI_API_KEY")
|
|
|
|
if not openai.api_key:
|
|
console.print(
|
|
"❌ Provide --openai-api-key argument or set the OPENAI_API_KEY environment variable",
|
|
style="red",
|
|
)
|
|
return False
|
|
|
|
print_debug = partial(print_debug_func, debug, console)
|
|
|
|
docs_dir = standardize_dir_path(docs_dir)
|
|
toolkit_dir = standardize_dir_path(toolkit_dir)
|
|
is_wrapper_toolkit = has_wrapper_tools_directory(toolkit_dir)
|
|
|
|
print_debug("Reading server metadata")
|
|
pip_package_name = read_toolkit_metadata(toolkit_dir)
|
|
|
|
print_debug(f"Getting list of tools for {toolkit_name} from the local Python environment")
|
|
tools = get_list_of_tools(toolkit_name)
|
|
|
|
print_debug(f"Found {len(tools)} tools")
|
|
|
|
print_debug("Getting all enumerations potentially used in tool argument specs")
|
|
enums = get_all_enumerations(toolkit_dir)
|
|
|
|
toolkit_mdx_file_path = build_toolkit_mdx_file_path(docs_section, docs_dir, toolkit_name)
|
|
print_debug(f"Building {toolkit_mdx_file_path} file")
|
|
toolkit_mdx = build_toolkit_mdx(
|
|
toolkit_package_name=toolkit_name,
|
|
toolkit_dir=toolkit_dir,
|
|
tools=tools,
|
|
docs_section=docs_section,
|
|
enums=enums,
|
|
pip_package_name=pip_package_name,
|
|
openai_model=openai_model,
|
|
is_wrapper_toolkit=is_wrapper_toolkit,
|
|
)
|
|
write_file(toolkit_mdx_file_path, toolkit_mdx)
|
|
|
|
if tool_call_examples:
|
|
print_debug("Building tool-call examples in Python and JavaScript")
|
|
examples = build_examples(print_debug, tools, openai_model)
|
|
|
|
for filename, example in examples:
|
|
example_path = build_example_path(filename, docs_dir, toolkit_name)
|
|
write_file(example_path, example)
|
|
|
|
print_debug(f"Done generating docs for {toolkit_name}")
|
|
|
|
return True
|