Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add Python autodocs #1703

Merged
merged 13 commits into from
Sep 5, 2024
Merged
132 changes: 132 additions & 0 deletions docs/generate_docs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
import os

from pydoc_markdown import PydocMarkdown

Check failure on line 3 in docs/generate_docs.py

View workflow job for this annotation

GitHub Actions / Pyright types check (3.11)

Import "pydoc_markdown" could not be resolved (reportMissingImports)
from pydoc_markdown.contrib.loaders.python import PythonLoader

Check failure on line 4 in docs/generate_docs.py

View workflow job for this annotation

GitHub Actions / Pyright types check (3.11)

Import "pydoc_markdown.contrib.loaders.python" could not be resolved (reportMissingImports)
from pydoc_markdown.contrib.processors.crossref import CrossrefProcessor

Check failure on line 5 in docs/generate_docs.py

View workflow job for this annotation

GitHub Actions / Pyright types check (3.11)

Import "pydoc_markdown.contrib.processors.crossref" could not be resolved (reportMissingImports)
from pydoc_markdown.contrib.processors.filter import FilterProcessor

Check failure on line 6 in docs/generate_docs.py

View workflow job for this annotation

GitHub Actions / Pyright types check (3.11)

Import "pydoc_markdown.contrib.processors.filter" could not be resolved (reportMissingImports)
from pydoc_markdown.contrib.processors.smart import SmartProcessor

Check failure on line 7 in docs/generate_docs.py

View workflow job for this annotation

GitHub Actions / Pyright types check (3.11)

Import "pydoc_markdown.contrib.processors.smart" could not be resolved (reportMissingImports)
from pydoc_markdown.contrib.renderers.markdown import MarkdownRenderer

Check failure on line 8 in docs/generate_docs.py

View workflow job for this annotation

GitHub Actions / Pyright types check (3.11)

Import "pydoc_markdown.contrib.renderers.markdown" could not be resolved (reportMissingImports)


def generate_config(package):
config = PydocMarkdown(
loaders=[PythonLoader(packages=[package])],
processors=[FilterProcessor(skip_empty_modules=True), CrossrefProcessor(), SmartProcessor()],
renderer=MarkdownRenderer(
render_module_header=False,
descriptive_class_title=False,
),
)
return config


def generate_modules(config):
modules = config.load_modules()
config.process(modules)
return modules


folder = "/Users/sarahwooders/repos/mintlify-docs/python-reference"


# Generate client documentation. This takes the documentation from the AbstractClient, but then appends the documentation from the LocalClient and RESTClient.
config = generate_config("memgpt.client")
modules = generate_modules(config)

## Get members from AbstractClient
##for module in generate_modules(config):
# for module in modules:
# client_members = [m for m in module.members if m.name == "AbstractClient"]
# if len(client_members) > 0:
# break
#
# client_members = client_members[0].members
# print(client_members)

# Add members and render for LocalClient and RESTClient
# config = generate_config("memgpt.client")

for module_name in ["LocalClient", "RESTClient"]:
for module in generate_modules(config):
# for module in modules:
members = [m for m in module.members if m.name == module_name]
if len(members) > 0:
print(module_name)
# module.members = members + client_members
# print(module_name, members)
module.members = members
open(os.path.join(folder, f"{module_name}.mdx"), "w").write(config.renderer.render_to_string([module]))
break


# Documentation of schemas
schema_config = generate_config("memgpt.schemas")

schema_models = [
"MemGPTBase",
"MemGPTConfig",
"Message",
"Passage",
"AgentState",
"Document",
"Source",
"LLMConfig",
"EmbeddingConfig",
"MemGPTRequest",
"MemGPTResponse",
["MemGPTMessage", "FunctionCallMessage", "FunctionReturn", "InternalMonologue"],
"MemGPTUsageStatistics",
["Memory", "BasicBlockMemory", "ChatMemory"],
"Block",
# ["Job", "JobStatus"],
"Job",
"Tool",
"User",
]
for module_name in schema_models:
for module in generate_modules(schema_config):
if isinstance(module_name, list):
# multiple objects in the same file
members = [m for m in module.members if m.name in module_name]
title = module_name[0]
else:
# single object in a file
members = [m for m in module.members if m.name == module_name]
title = module_name
if len(members) > 0:
print(module_name)
module.members = members
open(os.path.join(folder, f"{title}.mdx"), "w").write(config.renderer.render_to_string([module]))
break

# Documentation for connectors
connectors = ["DataConnector", "DirectoryConnector"]
connector_config = generate_config("memgpt.data_sources")
for module_name in connectors:
for module in generate_modules(connector_config):
members = [m for m in module.members if m.name == module_name]
if len(members) > 0:
print(module_name)
module.members = members
open(os.path.join(folder, f"{module_name}.mdx"), "w").write(config.renderer.render_to_string([module]))
break


## TODO: append the rendering from LocalClient and RESTClient from AbstractClient
#
## TODO: add documentation of schemas
#
# for module in modules:
# print(module.name, type(module))
# print(module)
#
# #module_name = "AbstractClient"
# #members = [m for m in module.members if m.name == module_name]
# #print([m.name for m in members])
# #module.members = members
#
# if "__" in module.name:
# continue
# #if len(members) > 0:
# # open(os.path.join(folder, f"{module_name}.md"), "w").write(config.renderer.render_to_string([module]))
# open(os.path.join(folder, f"{module.name}.md"), "w").write(config.renderer.render_to_string([module]))
Loading
Loading