|
import os |
|
|
|
os.environ['debug'] = 'true' |
|
|
|
import gradio as gr |
|
|
|
from GPTagger import * |
|
from langchain.prompts import PromptTemplate |
|
|
|
default_prompt = """ |
|
Please understand the instructions above and do extraction in the text below. |
|
|
|
TEXT: |
|
\"\"\" |
|
{text} |
|
\"\"\" |
|
""" |
|
|
|
def ner( |
|
model: str, |
|
nr_calls: int, |
|
tag_name: str, |
|
tag_max_len: int, |
|
text: str, |
|
prompt: str, |
|
key: str, |
|
): |
|
os.environ['OPENAI_API_KEY'] = key |
|
ner_pipeline = NerPipeline( |
|
tag_name=tag_name, |
|
nr_calls=nr_calls, |
|
model=model, |
|
tag_max_len=tag_max_len |
|
) |
|
template = PromptTemplate.from_template(prompt) |
|
|
|
extractions = ner_pipeline(text, template, "") |
|
|
|
if not extractions: |
|
output = [] |
|
else: |
|
output = [ |
|
{"entity": tag_name.upper(), "start": item.start, "end": item.end} |
|
for item in extractions |
|
] |
|
return {"text": text, "entities": output} |
|
|
|
|
|
with gr.Blocks() as demo: |
|
gr.Markdown( |
|
""" |
|
# GPTagger 🏷️ |
|
|
|
[GPTagger](https://github.com/hnliu-git/GPTagger) is a powerful text tagger that makes use of the GPT model. This tool allows you to extract tags from a given text by leveraging the capabilities of GPT. |
|
Simply specify the tag you want to extract from the text using prompt, you will get them highlighted in the output. |
|
""" |
|
) |
|
with gr.Row(): |
|
key = gr.Textbox(label='OpenAI API Key: (We don \'t record your key.)') |
|
with gr.Row(): |
|
tag_name = gr.Textbox(label="Tag Name:", placeholder='Enter the tag you want to extract') |
|
tag_max_len = gr.Slider( |
|
minimum=10, maximum=1000, step=10, label="Max length of a tag", value=50 |
|
) |
|
with gr.Row(): |
|
model = gr.Dropdown( |
|
["gpt-3.5-turbo-0613", "gpt-4-0613"], |
|
label="Model Name:", |
|
value="gpt-3.5-turbo-0613", |
|
) |
|
nr_call = gr.Number(label="nr_of_calls", minimum=1, value=1, precision=0) |
|
with gr.Row(): |
|
prompt = gr.TextArea( |
|
placeholder="Enter your prompt here...", |
|
label="Prompt: (Please include the default prompt at the end)", |
|
value=default_prompt, |
|
) |
|
text = gr.TextArea(placeholder="Enter your text here...", label="Text") |
|
btn = gr.Button("Submit") |
|
output = gr.HighlightedText() |
|
btn.click( |
|
ner, |
|
inputs=[ |
|
model, |
|
nr_call, |
|
tag_name, |
|
tag_max_len, |
|
text, |
|
prompt, |
|
key |
|
], |
|
outputs=output, |
|
) |
|
|
|
demo.launch() |
|
|