Spaces:
Sleeping
Sleeping
File size: 3,372 Bytes
7dbb743 a9f65b9 7dbb743 |
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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
from flask import Flask, render_template, request, redirect, url_for
from joblib import load
import pandas as pd
import re
from customFunctions import *
import json
import datetime
pd.set_option('display.max_colwidth', 1000)
PIPELINES = [
{
'id': 1,
'name': 'Baseline',
'pipeline': load("pipeline_ex1_s1.joblib")
},
{
'id': 2,
'name': 'Trained on a FeedForward NN',
'pipeline': load("pipeline_ex1_s2.joblib")
},
{
'id': 3,
'name': 'Trained on a CRF',
'pipeline': load("pipeline_ex1_s3.joblib")
},
#{
# 'id': 4,
# 'name': 'Trained on a small dataset',
# 'pipeline': load("pipeline_ex2_s1.joblib")
#},
#{
# 'id': 5,
# 'name': 'Trained on a large dataset',
# 'pipeline': load("pipeline_ex2_s2.joblib")
#},
#{
# 'id': 6,
# 'name': 'Embedded using TFIDF',
# 'pipeline': load("pipeline_ex3_s1.joblib")
#},
#{
# 'id': 7,
# 'name': 'Embedded using ?',
# 'pipeline': load("pipeline_ex3_s2.joblib")
#},
]
pipeline_metadata = [{'id': p['id'], 'name': p['name']} for p in PIPELINES]
def get_pipeline_by_id(pipelines, pipeline_id):
return next((p['pipeline'] for p in pipelines if p['id'] == pipeline_id), None)
def get_name_by_id(pipelines, pipeline_id):
return next((p['name'] for p in pipelines if p['id'] == pipeline_id), None)
def requestResults(text, pipeline):
labels = pipeline.predict(text)
print(labels.ndim)
if labels.ndim != 1:
flattened_predictions = []
for sentence in labels:
for tag in sentence:
flattened_predictions.append(tag)
labels = flattened_predictions
print(labels)
labels = [int(label) for label in labels]
tag_encoder = LabelEncoder()
tag_encoder.fit(['B-AC', 'O', 'B-LF', 'I-LF'])
decoded_labels = tag_encoder.inverse_transform(labels)
return decoded_labels
LOG_FILE = "usage_log.jsonl" # Each line is a JSON object
def log_interaction(user_input, model_name, predictions):
print("====== Interaction Log ======")
print("Timestamp:", datetime.datetime.utcnow().isoformat())
print("Model:", model_name)
print("Input:", user_input)
print("Predictions:", predictions)
print("=============================")
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html', pipelines= pipeline_metadata)
@app.route('/', methods=['POST'])
def get_data():
if request.method == 'POST':
text = request.form['search']
tokens = re.findall(r"\w+|[^\w\s]", text)
tokens_fomatted = pd.Series([pd.Series(tokens)])
pipeline_id = int(request.form['pipeline_select'])
pipeline = get_pipeline_by_id(PIPELINES, pipeline_id)
name = get_name_by_id(PIPELINES, pipeline_id)
labels = requestResults(tokens_fomatted, pipeline)
results = dict(zip(tokens, labels))
print(f"[INFO] Model: {name}")
print(f"[INFO] Input: {text}")
print(f"[INFO] Output: {results}")
return render_template('index.html', results=results, name=name, pipelines= pipeline_metadata)
if __name__ == '__main__':
app.run(host="0.0.0.0", port=7860)
#if __name__ == '__main__':
#app.run(host="0.0.0.0", port=7860)
|