johaunh
Add streamlit app
3273f67
import argparse
import os
import subprocess
from langchain_openai import ChatOpenAI
from . import CONFIG_DIR, OUTPUT_DIR
from .pipeline import Pipeline
from .utils import dump_all
from .validate import validate_knowledge_graph
default_config_path = os.path.join(CONFIG_DIR, "default_config.ini")
def main():
parser = argparse.ArgumentParser(
prog="words2wisdom",
description="Knowledge graph generation utilities using OpenAI LLMs"
)
subparsers = parser.add_subparsers(dest="command",
help="Available commands")
# init
parser_init = subparsers.add_parser("init",
usage="words2wisdom init [> PATH/TO/WRITE/CONFIG.INI]",
help="Initialize a template config.ini file",
description="Initialize a template config.ini file. Redirect to a new file using the '>' symbol.")
parser_init.set_defaults(func=get_default_config)
# gui
parser_gui = subparsers.add_parser("gui",
help="Use Words2Wisdom via Gradio interface",
description="use Words2Wisdom using Gradio interface")
parser_gui.add_argument("-s", "--streamlit",
action="store_true",
help="Use Streamlit GUI instead of Gradio GUI")
parser_gui.set_defaults(func=gui)
# run
parser_run = subparsers.add_parser("run",
help="Generate a knowledge graph from a given text using OpenAI LLMs",
description="Generate a knowledge graph from a given text using OpenAI LLMs")
parser_run.add_argument("text",
help="Path to text file")
parser_run.add_argument("-c", "--config",
help="Path to config.ini file",
default=default_config_path)
parser_run.add_argument("-o", "--output-dir",
metavar="OUTPUT_PATH",
help="Path to save outputs to",
default=OUTPUT_DIR)
parser_run.set_defaults(func=run)
# eval
parser_eval = subparsers.add_parser("eval",
help="Auto-evaluate knowledge graph using GPT-4",
description="Auto-evaluate knowledge graph using GPT-4")
parser_eval.add_argument("output_zip",
help="Path to output.zip file containing knowledge graph")
parser_eval.set_defaults(func=validate)
args = parser.parse_args()
args.func(args)
def get_default_config(args):
"""Print default config.ini"""
with open(default_config_path) as f:
default_config = f.read()
print(default_config)
def gui(args):
"""Run interface"""
if args.streamlit:
cmd = "streamlit run words2wisdom/gui_streamlit.py".split()
else:
cmd = "python -m words2wisdom.gui".split()
subprocess.run(cmd)
def run(args):
"""Text to KG pipeline"""
pipe = Pipeline.from_ini(args.config)
with open(args.text) as f:
batches, kg = pipe.run(f.read())
dump_all(pipe, batches, kg, to_path=args.output_dir)
def validate(args):
"""Validate knowledge graph"""
validate_knowledge_graph(
llm=ChatOpenAI(
model="gpt-4-turbo-preview",
#openai_api_key=...
),
output_zip=args.output_zip
)
if __name__ == "__main__":
main()