from GPT4KG import KnowledgeGraph
import gradio as gr
from PIL import Image
def generate_graph(input_text,api_key,graph):
if graph == []:
kg = KnowledgeGraph(api_key)
graph.append(kg)
else:
kg = graph[0]
kg.learn(str(input_text))
img = kg.display_graph()
graph[0] = kg
return img,graph
def answer_question(question,api_key,graph):
if graph == []:
kg = KnowledgeGraph(api_key)
graph.append(kg)
else:
kg = graph[0]
return kg.chat_qa(question)
def clear_graph(api_key,graph):
graph = []
kg = KnowledgeGraph(api_key)
graph.append(kg)
return graph,None#Image.new('RGB', (400, 100),(255, 255, 255))
title = "Associative Memory with GPT4KG"
description = "Enter text to generate a semantically searchable knowledge graph:"
with gr.Blocks() as demo:
gr.Markdown(f"
{title}
")
gr.Markdown(f"{description}
")
output_image = gr.Image(label="Knowledge Graph", type="pil")
api_key = gr.Textbox(lines=1, label="OpenAI API Key")
graph = gr.State([])
input_text = gr.Textbox(lines=5, label="Information to be added to graph")
submit_btn = gr.Button("Add info to graph")
submit_btn.click(fn=generate_graph, inputs=[input_text,api_key,graph], outputs=[output_image,graph])
question = gr.Textbox(lines=1, label="Question about the info in this graph")
answer = gr.Textbox(lines=1, label="Answer")
qa_btn = gr.Button("Ask question")
qa_btn.click(fn=answer_question, inputs=[question,api_key,graph], outputs=[answer])
clear_btn = gr.Button("Clear graph")
clear_btn.click(fn=clear_graph, inputs=[api_key,graph], outputs=[graph,output_image],api_name="clear")
demo.launch()