Module manubot.ai_revision.ai_revision_command
View Source
import logging
import shutil
import tempfile
from pathlib import Path
def cli_process(args):
try:
from manubot_ai_editor import models
from manubot_ai_editor.editor import ManuscriptEditor
except ImportError as err:
raise ModuleNotFoundError(
"Install manubot with: pip install manubot[ai-rev]"
) from err
# set paths for content
content_dir = args.content_directory
if not content_dir.is_dir():
raise SystemExit(
f"content directory is not a directory or does not exist: {content_dir}"
)
# set paths for temporary output
tmp_dir = Path(tempfile.mkdtemp(suffix="_manubot_ai_revision"))
logging.info(f"using temporary directory: {tmp_dir}")
# create a manuscript editor and model to revise
me = ManuscriptEditor(
content_dir=content_dir,
)
# instantiate a model
module_class = getattr(models, args.model_type)
if module_class == models.GPT3CompletionModel:
model = module_class(
title=me.title,
keywords=me.keywords,
)
else:
model_kwargs = parse_kwargs(args.model_kwargs)
model = module_class(
**model_kwargs,
)
# revise
me.revise_manuscript(tmp_dir, model, debug=True)
# copy the revised manuscript back to the content folder
for f in tmp_dir.glob("*"):
shutil.copyfile(f, content_dir / f.name)
def parse_kwargs(kwargs: list[str]) -> dict[str, object]:
"""
Parse a list of keyword arguments into a dictionary. Values are converted to int or bool if possible.
Args:
kwargs: A list of keyword arguments with format "key=value".
Returns:
A dictionary of keyword arguments. Returns an empty dictionary if kwargs is None.
"""
out = {}
if kwargs is None:
return out
for kwarg in kwargs:
if "=" not in kwarg:
raise ValueError(f"Invalid keyword argument: {kwarg}")
key, value = kwarg.split("=", maxsplit=1)
# try to convert values to int or bool if possible
if value.isdigit():
value = int(value)
elif value.lower() in ["true", "false"]:
value = value.lower() == "true"
out[key] = value
return out
Functions
cli_process
def cli_process(
args
)
View Source
def cli_process(args):
try:
from manubot_ai_editor import models
from manubot_ai_editor.editor import ManuscriptEditor
except ImportError as err:
raise ModuleNotFoundError(
"Install manubot with: pip install manubot[ai-rev]"
) from err
# set paths for content
content_dir = args.content_directory
if not content_dir.is_dir():
raise SystemExit(
f"content directory is not a directory or does not exist: {content_dir}"
)
# set paths for temporary output
tmp_dir = Path(tempfile.mkdtemp(suffix="_manubot_ai_revision"))
logging.info(f"using temporary directory: {tmp_dir}")
# create a manuscript editor and model to revise
me = ManuscriptEditor(
content_dir=content_dir,
)
# instantiate a model
module_class = getattr(models, args.model_type)
if module_class == models.GPT3CompletionModel:
model = module_class(
title=me.title,
keywords=me.keywords,
)
else:
model_kwargs = parse_kwargs(args.model_kwargs)
model = module_class(
**model_kwargs,
)
# revise
me.revise_manuscript(tmp_dir, model, debug=True)
# copy the revised manuscript back to the content folder
for f in tmp_dir.glob("*"):
shutil.copyfile(f, content_dir / f.name)
parse_kwargs
def parse_kwargs(
kwargs: list[str]
) -> dict[str, object]
Parse a list of keyword arguments into a dictionary. Values are converted to int or bool if possible.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
kwargs | None | A list of keyword arguments with format "key=value". | None |
Returns:
Type | Description |
---|---|
None | A dictionary of keyword arguments. Returns an empty dictionary if kwargs is None. |
View Source
def parse_kwargs(kwargs: list[str]) -> dict[str, object]:
"""
Parse a list of keyword arguments into a dictionary. Values are converted to int or bool if possible.
Args:
kwargs: A list of keyword arguments with format "key=value".
Returns:
A dictionary of keyword arguments. Returns an empty dictionary if kwargs is None.
"""
out = {}
if kwargs is None:
return out
for kwarg in kwargs:
if "=" not in kwarg:
raise ValueError(f"Invalid keyword argument: {kwarg}")
key, value = kwarg.split("=", maxsplit=1)
# try to convert values to int or bool if possible
if value.isdigit():
value = int(value)
elif value.lower() in ["true", "false"]:
value = value.lower() == "true"
out[key] = value
return out