ruslanmv commited on
Commit
9d23b87
·
1 Parent(s): c22f1a2

First commit

Browse files
Files changed (3) hide show
  1. app.py +113 -0
  2. genai.owl +227 -0
  3. requirements.txt +0 -0
app.py ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import matplotlib.pyplot as plt
3
+ import networkx as nx
4
+ from owlready2 import *
5
+ import difflib
6
+ import tempfile
7
+ import os
8
+
9
+ def plot_ontology(search_term, owl_file):
10
+ """
11
+ Loads an ontology OWL file, builds a graph of its classes and subclass relationships,
12
+ performs fuzzy matching to find nodes similar to the search term, and returns a plot
13
+ highlighting the matching nodes (and their immediate neighbors) in pink.
14
+
15
+ Args:
16
+ search_term (str): The search term used for fuzzy matching on node names.
17
+ owl_file (file): An uploaded ontology file in OWL format.
18
+
19
+ Returns:
20
+ A tuple with:
21
+ - The file path of the saved plot image.
22
+ - A text message with search result details.
23
+ """
24
+ if owl_file is None:
25
+ return None, "Please upload an ontology OWL file."
26
+
27
+ # Load the ontology from the provided file.
28
+ try:
29
+ # Append temporary directory to the ontology search path.
30
+ onto_path.append(tempfile.gettempdir())
31
+ # Load the ontology using its file URI.
32
+ onto = get_ontology("file://"+owl_file.name).load()
33
+ except Exception as e:
34
+ return None, f"Error loading ontology: {e}"
35
+
36
+ # Build a directed graph: nodes represent ontology classes and edges represent subclass relationships.
37
+ G = nx.DiGraph()
38
+ for cls in onto.classes():
39
+ G.add_node(cls.name, iri=cls.iri)
40
+ for parent in cls.is_a:
41
+ if isinstance(parent, ThingClass):
42
+ G.add_edge(parent.name, cls.name)
43
+
44
+ # Define a helper function for fuzzy searching nodes.
45
+ def fuzzy_search(query, cutoff=0.6):
46
+ query = query.lower()
47
+ lower_to_orig = {node.lower(): node for node in G.nodes}
48
+ lower_nodes = list(lower_to_orig.keys())
49
+ matches = difflib.get_close_matches(query, lower_nodes, cutoff=cutoff)
50
+ return [lower_to_orig[m] for m in matches]
51
+
52
+ search_results = fuzzy_search(search_term)
53
+ if not search_results:
54
+ result_message = f"No matches found for '{search_term}'."
55
+ else:
56
+ result_message = f"Found nodes: {', '.join(search_results)}"
57
+
58
+ # Determine which nodes to highlight: matched nodes plus their immediate neighbors (parents and children).
59
+ highlight_nodes = set()
60
+ for node in search_results:
61
+ highlight_nodes.add(node)
62
+ highlight_nodes.update(G.predecessors(node))
63
+ highlight_nodes.update(G.successors(node))
64
+
65
+ # Create the graph layout and plot.
66
+ pos = nx.spring_layout(G, k=0.5, iterations=50)
67
+ plt.figure(figsize=(12, 8))
68
+ node_colors = ['pink' if node in highlight_nodes else 'lightblue' for node in G.nodes]
69
+ nx.draw(G, pos, with_labels=True, node_size=1500, node_color=node_colors, font_size=10, arrows=True)
70
+ plt.title("Ontology Graph with Highlighted Related Nodes\n" + result_message)
71
+
72
+ # Save the plot to a temporary file and close the plot.
73
+ tmpfile = tempfile.NamedTemporaryFile(suffix='.png', delete=False)
74
+ plt.savefig(tmpfile.name, format="png")
75
+ plt.close()
76
+
77
+ return tmpfile.name, result_message
78
+
79
+ # Load default file and search term
80
+ default_owl_path = "genai.owl"
81
+ default_search_term = "LoRa"
82
+ with open(default_owl_path, "rb") as f:
83
+ default_owl_bytes = f.read()
84
+
85
+ # Create a temporary file to store the default OWL content
86
+ temp_owl_file = tempfile.NamedTemporaryFile(delete=False, suffix=".owl")
87
+ temp_owl_file.write(default_owl_bytes)
88
+ temp_owl_file.close()
89
+
90
+ # Define the Gradio interface.
91
+ iface = gr.Interface(
92
+ fn=plot_ontology,
93
+ inputs=[
94
+ gr.Textbox(lines=1, label="Search Term", placeholder="Enter a search term (e.g., LoRa)", value=default_search_term),
95
+ gr.File(label="Upload Ontology OWL File", value=temp_owl_file.name)
96
+ ],
97
+ outputs=[
98
+ gr.Image(type="filepath", label="Ontology Graph"),
99
+ gr.Textbox(label="Search Result Details")
100
+ ],
101
+ title="Ontology Explorer",
102
+ description="Upload an ontology OWL file and enter a search term to visualize the ontology graph. "
103
+ "Nodes matching the search term and their immediate neighbors (parents and children) are highlighted in pink.",
104
+ examples=[
105
+ ["LoRa", "genai.owl"],
106
+ ["LLM", "genai.owl"],
107
+ ["RLHF", "genai.owl"]
108
+ ],
109
+ cache_examples=False
110
+ )
111
+
112
+ if __name__ == "__main__":
113
+ iface.launch(share=True)
genai.owl ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <rdf:RDF xmlns="http://www.example.com/generative_ai#"
3
+ xml:base="http://www.example.com/generative_ai"
4
+ xmlns:owl="http://www.w3.org/2002/07/owl#"
5
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
7
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema#">
8
+
9
+ <owl:Ontology rdf:about="http://www.example.com/generative_ai">
10
+ <rdfs:label>Complete Generative AI Ontology - Extended Version</rdfs:label>
11
+ <rdfs:comment>An extensive ontology that represents all relevant concepts, relationships, and processes in generative AI, including model types, architectures, components, training techniques, tools, deployment methods, and frameworks for research and PoC development.</rdfs:comment>
12
+ </owl:Ontology>
13
+
14
+ <!-- 1. Generative Model Types -->
15
+ <owl:Class rdf:about="http://www.example.com/generative_ai/GenerativeModel"/>
16
+ <owl:Class rdf:about="http://www.example.com/generative_ai/LLM">
17
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/GenerativeModel"/>
18
+ <owl:DatatypeProperty rdf:about="http://www.example.com/generative_ai/architecture">
19
+ <rdfs:range rdf:resource="xsd:string"/>
20
+ </owl:DatatypeProperty>
21
+ <owl:DatatypeProperty rdf:about="http://www.example.com/generative_ai/usesPretrainedWeights">
22
+ <rdfs:range rdf:resource="xsd:boolean"/>
23
+ </owl:DatatypeProperty>
24
+ <owl:ObjectProperty rdf:about="http://www.example.com/generative_ai/supportsTokenization">
25
+ <rdfs:range rdf:resource="http://www.example.com/generative_ai/TokenizationMethod"/>
26
+ </owl:ObjectProperty>
27
+ </owl:Class>
28
+
29
+ <owl:Class rdf:about="http://www.example.com/generative_ai/DiffusionModel">
30
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/GenerativeModel"/>
31
+ <owl:ObjectProperty rdf:about="http://www.example.com/generative_ai/usesNoiseScheduler"/>
32
+ <owl:ObjectProperty rdf:about="http://www.example.com/generative_ai/usesUNetArchitecture"/>
33
+ </owl:Class>
34
+
35
+ <owl:Class rdf:about="http://www.example.com/generative_ai/AutoregressiveModel">
36
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/GenerativeModel"/>
37
+ <owl:DatatypeProperty rdf:about="http://www.example.com/generative_ai/sequenceLength">
38
+ <rdfs:range rdf:resource="xsd:int"/>
39
+ </owl:DatatypeProperty>
40
+ </owl:Class>
41
+
42
+ <!-- Subclasses for Specific Models -->
43
+ <owl:Class rdf:about="http://www.example.com/generative_ai/GPT">
44
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/LLM"/>
45
+ </owl:Class>
46
+
47
+ <owl:Class rdf:about="http://www.example.com/generative_ai/BERT">
48
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/LLM"/>
49
+ </owl:Class>
50
+
51
+ <owl:Class rdf:about="http://www.example.com/generative_ai/VariationalAutoencoder">
52
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/GenerativeModel"/>
53
+ <owl:DatatypeProperty rdf:about="http://www.example.com/generative_ai/latentSpaceSize">
54
+ <rdfs:range rdf:resource="xsd:int"/>
55
+ </owl:DatatypeProperty>
56
+ <owl:DatatypeProperty rdf:about="http://www.example.com/generative_ai/reconstructionLoss">
57
+ <rdfs:range rdf:resource="xsd:string"/>
58
+ </owl:DatatypeProperty>
59
+ </owl:Class>
60
+
61
+ <owl:Class rdf:about="http://www.example.com/generative_ai/GAN">
62
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/GenerativeModel"/>
63
+ <owl:ObjectProperty rdf:about="http://www.example.com/generative_ai/discriminator"/>
64
+ <owl:ObjectProperty rdf:about="http://www.example.com/generative_ai/generator"/>
65
+ <owl:DatatypeProperty rdf:about="http://www.example.com/generative_ai/lossFunction">
66
+ <rdfs:range rdf:resource="xsd:string"/>
67
+ </owl:DatatypeProperty>
68
+ </owl:Class>
69
+
70
+ <!-- Subclasses of GAN -->
71
+ <owl:Class rdf:about="http://www.example.com/generative_ai/DCGAN">
72
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/GAN"/>
73
+ </owl:Class>
74
+
75
+ <owl:Class rdf:about="http://www.example.com/generative_ai/WGAN">
76
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/GAN"/>
77
+ </owl:Class>
78
+
79
+ <owl:Class rdf:about="http://www.example.com/generative_ai/StyleGAN">
80
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/GAN"/>
81
+ </owl:Class>
82
+
83
+ <owl:Class rdf:about="http://www.example.com/generative_ai/CycleGAN">
84
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/GAN"/>
85
+ </owl:Class>
86
+
87
+ <!-- 2. Transformer Architecture Components -->
88
+ <owl:Class rdf:about="http://www.example.com/generative_ai/Transformer"/>
89
+ <owl:Class rdf:about="http://www.example.com/generative_ai/AttentionMechanism"/>
90
+ <owl:Class rdf:about="http://www.example.com/generative_ai/SelfAttention">
91
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/AttentionMechanism"/>
92
+ </owl:Class>
93
+
94
+ <owl:Class rdf:about="http://www.example.com/generative_ai/MultiHeadAttention">
95
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/AttentionMechanism"/>
96
+ </owl:Class>
97
+
98
+ <owl:Class rdf:about="http://www.example.com/generative_ai/PositionalEncoding"/>
99
+ <owl:Class rdf:about="http://www.example.com/generative_ai/AbsolutePositionalEncoding">
100
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/PositionalEncoding"/>
101
+ </owl:Class>
102
+
103
+ <owl:Class rdf:about="http://www.example.com/generative_ai/RelativePositionalEncoding">
104
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/PositionalEncoding"/>
105
+ </owl:Class>
106
+
107
+ <owl:Class rdf:about="http://www.example.com/generative_ai/NormalizationLayer"/>
108
+ <owl:Class rdf:about="http://www.example.com/generative_ai/LayerNormalization">
109
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/NormalizationLayer"/>
110
+ </owl:Class>
111
+
112
+ <owl:Class rdf:about="http://www.example.com/generative_ai/BatchNormalization">
113
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/NormalizationLayer"/>
114
+ </owl:Class>
115
+
116
+ <owl:Class rdf:about="http://www.example.com/generative_ai/FeedForwardNetwork"/>
117
+ <owl:Class rdf:about="http://www.example.com/generative_ai/ResidualConnection"/>
118
+
119
+ <!-- 3. Diffusion Model Components -->
120
+ <owl:Class rdf:about="http://www.example.com/generative_ai/NoiseScheduler"/>
121
+ <owl:Class rdf:about="http://www.example.com/generative_ai/LinearScheduler">
122
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/NoiseScheduler"/>
123
+ </owl:Class>
124
+
125
+ <owl:Class rdf:about="http://www.example.com/generative_ai/NonLinearScheduler">
126
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/NoiseScheduler"/>
127
+ </owl:Class>
128
+
129
+ <owl:Class rdf:about="http://www.example.com/generative_ai/UNetArchitecture"/>
130
+ <owl:Class rdf:about="http://www.example.com/generative_ai/DownsamplingBlock"/>
131
+ <owl:Class rdf:about="http://www.example.com/generative_ai/UpsamplingBlock"/>
132
+ <owl:Class rdf:about="http://www.example.com/generative_ai/SkipConnection"/>
133
+
134
+ <!-- 4. Training Techniques -->
135
+ <owl:Class rdf:about="http://www.example.com/generative_ai/TrainingTechnique"/>
136
+ <owl:Class rdf:about="http://www.example.com/generative_ai/SelfSupervisedLearning">
137
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/TrainingTechnique"/>
138
+ </owl:Class>
139
+
140
+ <owl:Class rdf:about="http://www.example.com/generative_ai/ReinforcementLearning">
141
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/TrainingTechnique"/>
142
+ </owl:Class>
143
+
144
+ <owl:Class rdf:about="http://www.example.com/generative_ai/RLHF">
145
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/ReinforcementLearning"/>
146
+ </owl:Class>
147
+
148
+ <owl:Class rdf:about="http://www.example.com/generative_ai/DiffusionTrainingTechnique"/>
149
+
150
+ <!-- 5. Fine-Tuning Techniques for LLM and Multimodal -->
151
+ <owl:Class rdf:about="http://www.example.com/generative_ai/FineTuningTechnique"/>
152
+ <owl:Class rdf:about="http://www.example.com/generative_ai/LoRA">
153
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/FineTuningTechnique"/>
154
+ </owl:Class>
155
+
156
+ <owl:Class rdf:about="http://www.example.com/generative_ai/PromptTuning">
157
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/FineTuningTechnique"/>
158
+ </owl:Class>
159
+
160
+ <owl:Class rdf:about="http://www.example.com/generative_ai/AdapterTuning">
161
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/FineTuningTechnique"/>
162
+ </owl:Class>
163
+
164
+ <!-- 6. Retrieval-Augmented Generation (RAG) and Vector Databases -->
165
+ <owl:Class rdf:about="http://www.example.com/generative_ai/RAG"/>
166
+ <owl:Class rdf:about="http://www.example.com/generative_ai/VectorDatabase">
167
+ <owl:ObjectProperty rdf:about="http://www.example.com/generative_ai/embeddingModel"/>
168
+ </owl:Class>
169
+
170
+ <!-- 7. Tools and Frameworks for Development -->
171
+ <owl:Class rdf:about="http://www.example.com/generative_ai/DevelopmentTool"/>
172
+ <owl:Class rdf:about="http://www.example.com/generative_ai/Gradio">
173
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/DevelopmentTool"/>
174
+ </owl:Class>
175
+
176
+ <owl:Class rdf:about="http://www.example.com/generative_ai/Streamlit">
177
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/DevelopmentTool"/>
178
+ </owl:Class>
179
+
180
+ <owl:Class rdf:about="http://www.example.com/generative_ai/Flask">
181
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/DevelopmentTool"/>
182
+ </owl:Class>
183
+
184
+ <owl:Class rdf:about="http://www.example.com/generative_ai/HuggingFace">
185
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/DevelopmentTool"/>
186
+ </owl:Class>
187
+
188
+ <owl:Class rdf:about="http://www.example.com/generative_ai/Ollama">
189
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/DevelopmentTool"/>
190
+ </owl:Class>
191
+
192
+ <owl:Class rdf:about="http://www.example.com/generative_ai/LLaMAFile">
193
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/DevelopmentTool"/>
194
+ </owl:Class>
195
+
196
+ <owl:Class rdf:about="http://www.example.com/generative_ai/MAGMA">
197
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/DevelopmentTool"/>
198
+ </owl:Class>
199
+
200
+ <owl:Class rdf:about="http://www.example.com/generative_ai/Colab">
201
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/DevelopmentTool"/>
202
+ </owl:Class>
203
+
204
+ <!-- 8. Infrastructure Components for Deployment and Training -->
205
+ <owl:Class rdf:about="http://www.example.com/generative_ai/InferenceHardware"/>
206
+ <owl:Class rdf:about="http://www.example.com/generative_ai/GPU">
207
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/InferenceHardware"/>
208
+ </owl:Class>
209
+
210
+ <owl:Class rdf:about="http://www.example.com/generative_ai/CPU">
211
+ <rdfs:subClassOf rdf:resource="http://www.example.com/generative_ai/InferenceHardware"/>
212
+ </owl:Class>
213
+
214
+ <!-- 9. Relationships -->
215
+ <owl:ObjectProperty rdf:about="http://www.example.com/generative_ai/usesQuantizationMethod"/>
216
+ <owl:ObjectProperty rdf:about="http://www.example.com/generative_ai/trainsWith"/>
217
+ <owl:ObjectProperty rdf:about="http://www.example.com/generative_ai/evaluatesWith"/>
218
+ <owl:ObjectProperty rdf:about="http://www.example.com/generative_ai/appliesEthicalGuideline"/>
219
+ <owl:ObjectProperty rdf:about="http://www.example.com/generative_ai/combinesModality"/>
220
+ <owl:ObjectProperty rdf:about="http://www.example.com/generative_ai/implementsAttentionMechanism"/>
221
+ <owl:ObjectProperty rdf:about="http://www.example.com/generative_ai/hasPositionalEncoding"/>
222
+ <owl:ObjectProperty rdf:about="http://www.example.com/generative_ai/usesOptimizationAlgorithm"/>
223
+ <owl:ObjectProperty rdf:about="http://www.example.com/generative_ai/deploysVia"/>
224
+ <owl:ObjectProperty rdf:about="http://www.example.com/generative_ai/usesDevelopmentTool"/>
225
+ <owl:ObjectProperty rdf:about="http://www.example.com/generative_ai/runsOnHardware"/>
226
+
227
+ </rdf:RDF>
requirements.txt ADDED
File without changes