Код: Выделить всё
POST http://127.0.0.1:5000/predict 400 (BAD REQUEST)
sendRequest @ script.js:3
onclick @ (index):13
Код: Выделить всё
script.js:20 Error: Error: Server error: BAD REQUEST at script.js:12:19
1 app.py:
Код: Выделить всё
from flask import Flask, request, jsonify, send_from_directory
from flask_cors import CORS
import logging
from transformers import TFGPT2LMHeadModel, GPT2Tokenizer
import os
# Configure logging
logging.basicConfig(level=logging.DEBUG)
# Load the GPT-2 model and tokenizer
model_name = "gpt2"
model = TFGPT2LMHeadModel.from_pretrained(model_name)
tokenizer = GPT2Tokenizer.from_pretrained(model_name)
app = Flask(__name__, static_folder='static')
CORS(app)
@app.route('/')
def serve_index():
try:
return send_from_directory(app.static_folder, 'index.html')
except FileNotFoundError:
return jsonify({'error': 'index.html not found'}), 404
@app.route('/predict', methods=['POST'])
def predict():
try:
data = request.get_json()
print(f"Incoming request data: {data}") # Log incoming data for debugging
if not data:
return jsonify({'error': 'No JSON data provided'}), 400
text = data.get('text')
if not text:
return jsonify({'error': 'No text provided'}), 400
# Generate a response using GPT-2 with attention mask
max_length = 150 # Adjust as needed
inputs = tokenizer.encode_plus(
text,
return_tensors='tf',
padding='max_length', # Use padding='max_length'
truncation=True,
max_length=max_length # Crucial: Set max_length
)
input_ids = inputs['input_ids']
attention_mask = inputs['attention_mask']
outputs = model.generate(
input_ids,
attention_mask=attention_mask,
max_length=max_length,
num_return_sequences=1,
pad_token_id=tokenizer.eos_token_id
)
response_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
logging.debug(f"Generated response: {response_text}")
return jsonify({'response': response_text})
except ValueError as e:
logging.error(f"Input Error: {e}")
return jsonify({'error': str(e)}), 400 # 400 Bad Request for input errors
except Exception as e:
logging.error(f"Model Error: {e}")
return jsonify({'error': 'An error occurred during prediction'}), 500
if __name__ == '__main__':
try:
app.run(host='0.0.0.0', port=5000, debug=True) # Set debug=False for production
except Exception as e:
logging.error(f"Failed to start the Flask server: {e}")
raise
- script.js:
Код: Выделить всё
function sendRequest() {
const textInput = document.getElementById('textInput').value;
fetch('/predict', { // Switch to port 5000
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ text: textInput }) // This is the JSON sent to Flask
})
.then(response => {
if (!response.ok) {
throw new Error(`Server error: ${response.statusText}`);
}
return response.json();
})
.then(data => {
document.getElementById('response').innerText = `Response: ${data.response}`;
})
.catch(error => {
console.error('Error:', error);
document.getElementById('response').innerText = `Error: ${error}`;
});
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... st-request