|
|
from peft import PeftModel, PeftConfig |
|
|
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer |
|
|
from flask import Flask, render_template, request, jsonify |
|
|
|
|
|
HUGGING_FACE_USER_NAME = "elalimy" |
|
|
model_name = "my_awesome_peft_finetuned_helsinki_model" |
|
|
peft_model_id = f"{HUGGING_FACE_USER_NAME}/{model_name}" |
|
|
|
|
|
|
|
|
config = PeftConfig.from_pretrained(peft_model_id) |
|
|
|
|
|
base_model = AutoModelForSeq2SeqLM.from_pretrained(config.base_model_name_or_path, return_dict=True, load_in_8bit=False) |
|
|
|
|
|
|
|
|
tokenizer = AutoTokenizer.from_pretrained(config.base_model_name_or_path) |
|
|
|
|
|
|
|
|
AI_model = PeftModel.from_pretrained(base_model, peft_model_id) |
|
|
|
|
|
|
|
|
app = Flask(__name__, template_folder='templates') |
|
|
|
|
|
|
|
|
def generate_translation(source_text, device="cpu"): |
|
|
|
|
|
input_ids = tokenizer.encode(source_text, return_tensors='pt').to(device) |
|
|
|
|
|
|
|
|
model = base_model.to(device) |
|
|
|
|
|
|
|
|
generated_ids = model.generate( |
|
|
input_ids=input_ids, |
|
|
max_length=512, |
|
|
num_beams=4, |
|
|
length_penalty=5, |
|
|
no_repeat_ngram_size=4, |
|
|
early_stopping=True |
|
|
) |
|
|
|
|
|
|
|
|
generated_text = tokenizer.decode(generated_ids[0], skip_special_tokens=True) |
|
|
|
|
|
return generated_text |
|
|
|
|
|
|
|
|
@app.route('/') |
|
|
def index(): |
|
|
return render_template('index.html') |
|
|
|
|
|
|
|
|
@app.route('/translate', methods=['POST']) |
|
|
def translate_text(): |
|
|
data = request.get_json() |
|
|
if 'text' not in data: |
|
|
return jsonify({'error': 'No text to translate provided'}), 400 |
|
|
|
|
|
text_to_translate = data['text'] |
|
|
translated_text = generate_translation(text_to_translate) |
|
|
|
|
|
return jsonify({'translated_text': translated_text}) |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
app.run() |
|
|
|