Graphify / utils.py
Game4all's picture
Initial commit
51f2dc1
from typing import Dict, List
from jinja2 import Environment
from schemas import ExtractedRelation
def build_visjs_graph(entities: List[str], relations: List[ExtractedRelation]) -> Dict[str, List[Dict]]:
"""Builds a vertex and edge graph for displaying in UI"""
unique_entities = set(entities) # maintains order, removes duplicates
entity_to_id = {entity: idx for idx, entity in enumerate(unique_entities)}
nodes = [
{"id": entity_to_id[entity], "label": entity, "title": entity}
for entity in unique_entities
]
# Create edges list from relations
edges = []
for rel in relations:
start_id = entity_to_id.get(rel.start)
end_id = entity_to_id.get(rel.to)
if start_id is not None and end_id is not None:
edges.append({
"from": start_id,
"to": end_id,
"label": rel.tag,
"title": rel.description,
"arrows": "to",
})
return {"nodes": nodes, "edges": edges}
async def fmt_prompt(env: Environment, prompt_id: str, **args):
"""Returns a formatted prompt"""
prompt = env.get_template(prompt_id)
return await prompt.render_async(args)