artificialguybr's picture
Update app.py
b31a1e4
raw
history blame
2.67 kB
import gradio as gr
import openai
import json
from graphviz import Digraph
import base64
from PIL import Image
def generate_knowledge_graph(api_key, user_input):
print("Setting OpenAI API key...")
openai.api_key = api_key
print("Making API call to OpenAI...")
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo-16k",
messages=[
{
"role": "user",
"content": f"Help me understand following by describing as a detailed knowledge graph: {user_input}",
}
],
functions=[
{
"name": "knowledge_graph",
"description": "Generate a knowledge graph with entities and relationships.",
"parameters": {
"type": "object",
"properties": {
"metadata": {"type": "object"},
"nodes": {"type": "array"},
"edges": {"type": "array"}
},
"required": ["nodes", "edges"]
}
}
],
function_call={"name": "knowledge_graph"}
)
print("Received response from OpenAI.")
response_data = completion.choices[0]["message"]["function_call"]["arguments"]
print(f"Response data: {response_data}")
print("Converting response to JSON...")
response_dict = json.loads(response_data)
print("Generating knowledge graph using Graphviz...")
dot = Digraph(comment="Knowledge Graph")
# Add nodes to the graph
for node in response_dict.get("nodes", []):
dot.node(node["id"], f"{node['label']} ({node['type']})")
# Add edges to the graph
for edge in response_dict.get("edges", []):
dot.edge(edge["from"], edge["to"], label=edge["relationship"])
# Render to PNG format
print("Rendering graph to PNG format...")
dot.format = "png"
dot.render(filename="knowledge_graph", cleanup=True)
# Convert PNG to base64 to display in Gradio
print("Converting PNG to base64...")
with open("knowledge_graph.png", "rb") as img_file:
img_base64 = base64.b64encode(img_file.read()).decode()
print("Returning base64 image to Gradio interface.")
return f"data:image/png;base64,{img_base64}"
iface = gr.Interface(
fn=generate_knowledge_graph,
inputs=[
gr.inputs.Textbox(label="OpenAI API Key", type="password"),
gr.inputs.Textbox(label="Text to Generate Knowledge Graph")
],
outputs=gr.outputs.Image(type="pil", label="Generated Knowledge Graph"),
live=False
)
print("Launching Gradio interface...")
iface.launch()