from flask import Flask, request from flask_cors import CORS import numpy as np from .salience import extract, AVAILABLE_MODELS import json app = Flask(__name__) CORS(app, origins=["http://localhost:5173"]) # Load default text from transcript.txt for GET requests with open('./transcript.txt', 'r') as file: default_source_text = file.read().strip() @app.route("/models") def models_view(): return json.dumps(list(AVAILABLE_MODELS.keys())) @app.route("/salience", methods=['GET']) def salience_view_default(): """GET endpoint - processes default text from transcript.txt""" model_name = request.args.get('model', 'all-mpnet-base-v2') # Validate model name if model_name not in AVAILABLE_MODELS: return json.dumps({'error': f'Invalid model: {model_name}'}), 400 sentence_ranges, adjacency = extract(default_source_text, model_name) return json.dumps({ 'source': default_source_text, 'intervals': sentence_ranges, 'adjacency': np.nan_to_num(adjacency.numpy()).tolist(), 'model': model_name, }) @app.route("/salience", methods=['POST']) def salience_view_custom(): """POST endpoint - processes text from request body""" model_name = request.args.get('model', 'all-mpnet-base-v2') # Validate model name if model_name not in AVAILABLE_MODELS: return json.dumps({'error': f'Invalid model: {model_name}'}), 400 # Get document content from request body as plain text source_text = request.data.decode('utf-8').strip() if not source_text: return json.dumps({'error': 'No text provided'}), 400 sentence_ranges, adjacency = extract(source_text, model_name) return json.dumps({ 'source': source_text, 'intervals': sentence_ranges, 'adjacency': np.nan_to_num(adjacency.numpy()).tolist(), 'model': model_name, })