File size: 2,409 Bytes
941e8f6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
"""
app.py – Flask entry point for Semantic KG Diff
Run: python backend/app.py
"""
import os, sys, traceback
sys.path.insert(0, os.path.dirname(__file__))

from flask import Flask, request, jsonify, send_from_directory
from flask_cors import CORS
from semantic_diff import extract_entities_and_relations, compute_diff, summarise_diff
from graph_utils import build_graph, visualise_diff, graph_to_json

def create_app():
    app = Flask(
        __name__,
        static_folder=os.path.join(os.path.dirname(__file__), 'frontend', 'static'),
        static_url_path='/static',
        template_folder=os.path.join(os.path.dirname(__file__), 'frontend'),
    )
    CORS(app)

    @app.route('/')
    def index():
        return send_from_directory(app.template_folder, 'index.html')

    @app.route('/api/diff', methods=['POST'])
    def diff():
        data = request.get_json()
        v1_text  = (data or {}).get('v1', '').strip()
        v2_text  = (data or {}).get('v2', '').strip()
        api_key  = (data or {}).get('api_key', '').strip()

        if not v1_text or not v2_text:
            return jsonify({'error': 'Both v1 and v2 text are required.'}), 400
        if not api_key:
            return jsonify({'error': 'Groq API key is required.'}), 400

        try:
            kg1 = extract_entities_and_relations(v1_text, api_key)
            kg2 = extract_entities_and_relations(v2_text, api_key)
            diff_result = compute_diff(kg1, kg2)
            summary = summarise_diff(diff_result, api_key)

            g1 = build_graph(kg1)
            g2 = build_graph(kg2)
            img_b64 = visualise_diff(g1, g2, diff_result)

            return jsonify({
                'kg1': kg1,
                'kg2': kg2,
                'diff': diff_result,
                'summary': summary,
                'graph_img': img_b64,
                'graph_json': {
                    'v1': graph_to_json(g1),
                    'v2': graph_to_json(g2),
                },
            })
        except Exception as e:
            traceback.print_exc()
            return jsonify({'error': str(e)}), 500

    return app


if __name__ == '__main__':
    app = create_app()
    port = int(os.environ.get('PORT', 5050))
    print(f'\n🔍  Semantic KG Diff running at http://localhost:{port}\n')
    debug = os.environ.get('FLASK_DEBUG', '0') == '1'
    app.run(host='0.0.0.0', port=port, debug=debug)