Update app.py
Browse files
app.py
CHANGED
@@ -1,12 +1,12 @@
|
|
1 |
import gradio as gr
|
2 |
import json
|
3 |
from graphviz import Digraph
|
4 |
-
import
|
5 |
-
|
6 |
|
7 |
def generate_concept_map(json_input: str) -> str:
|
8 |
"""
|
9 |
-
|
10 |
|
11 |
Args:
|
12 |
json_input (str): JSON describing the concept map structure.
|
@@ -24,19 +24,14 @@ def generate_concept_map(json_input: str) -> str:
|
|
24 |
}
|
25 |
|
26 |
Returns:
|
27 |
-
str:
|
28 |
-
|
29 |
-
Raises:
|
30 |
-
ValueError: If JSON doesn't meet required format
|
31 |
"""
|
32 |
try:
|
33 |
-
# Validate input
|
34 |
if not json_input.strip():
|
35 |
return "Error: Empty input"
|
36 |
|
37 |
data = json.loads(json_input)
|
38 |
|
39 |
-
# Validate basic structure
|
40 |
if 'central_node' not in data or 'nodes' not in data:
|
41 |
raise ValueError("Missing required fields: central_node or nodes")
|
42 |
|
@@ -119,15 +114,13 @@ def generate_concept_map(json_input: str) -> str:
|
|
119 |
fontsize='8'
|
120 |
)
|
121 |
|
122 |
-
#
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
# Return Hugging Face compatible URL
|
127 |
-
return f"/file={filename}.png"
|
128 |
|
129 |
except json.JSONDecodeError:
|
130 |
-
return "Error: Invalid JSON"
|
131 |
except Exception as e:
|
132 |
return f"Error: {str(e)}"
|
133 |
|
@@ -141,16 +134,15 @@ if __name__ == "__main__":
|
|
141 |
),
|
142 |
outputs=gr.Textbox(
|
143 |
label="Image URL",
|
144 |
-
placeholder="
|
145 |
),
|
146 |
title="Concept Map Generator",
|
147 |
-
description="Create concept maps from JSON
|
148 |
)
|
149 |
|
150 |
-
# Hugging Face Spaces configuration
|
151 |
demo.launch(
|
152 |
mcp_server=True,
|
153 |
share=False,
|
154 |
-
server_port=
|
155 |
server_name="0.0.0.0"
|
156 |
)
|
|
|
1 |
import gradio as gr
|
2 |
import json
|
3 |
from graphviz import Digraph
|
4 |
+
import io
|
5 |
+
import base64
|
6 |
|
7 |
def generate_concept_map(json_input: str) -> str:
|
8 |
"""
|
9 |
+
Generate concept map from JSON and return as base64 image
|
10 |
|
11 |
Args:
|
12 |
json_input (str): JSON describing the concept map structure.
|
|
|
24 |
}
|
25 |
|
26 |
Returns:
|
27 |
+
str: Base64 data URL of the generated concept map
|
|
|
|
|
|
|
28 |
"""
|
29 |
try:
|
|
|
30 |
if not json_input.strip():
|
31 |
return "Error: Empty input"
|
32 |
|
33 |
data = json.loads(json_input)
|
34 |
|
|
|
35 |
if 'central_node' not in data or 'nodes' not in data:
|
36 |
raise ValueError("Missing required fields: central_node or nodes")
|
37 |
|
|
|
114 |
fontsize='8'
|
115 |
)
|
116 |
|
117 |
+
# Convert to base64 image
|
118 |
+
img_data = dot.pipe(format='png')
|
119 |
+
img_base64 = base64.b64encode(img_data).decode()
|
120 |
+
return f"data:image/png;base64,{img_base64}"
|
|
|
|
|
121 |
|
122 |
except json.JSONDecodeError:
|
123 |
+
return "Error: Invalid JSON format"
|
124 |
except Exception as e:
|
125 |
return f"Error: {str(e)}"
|
126 |
|
|
|
134 |
),
|
135 |
outputs=gr.Textbox(
|
136 |
label="Image URL",
|
137 |
+
placeholder="Base64 image URL will appear here"
|
138 |
),
|
139 |
title="Concept Map Generator",
|
140 |
+
description="Create concept maps from JSON for web display"
|
141 |
)
|
142 |
|
|
|
143 |
demo.launch(
|
144 |
mcp_server=True,
|
145 |
share=False,
|
146 |
+
server_port=7860,
|
147 |
server_name="0.0.0.0"
|
148 |
)
|