Spaces:
Runtime error
Runtime error
import os | |
import torch | |
import gradio as gr | |
from transformers import MarianMTModel, MarianTokenizer, pipeline, AutoTokenizer | |
from huggingface_hub import login | |
# Read the token from the environment variable | |
HUGGINGFACE_TOKEN = os.getenv("HUGGINGFACE_TOKEN") | |
# Authenticate with Hugging Face | |
if HUGGINGFACE_TOKEN: | |
login(token=HUGGINGFACE_TOKEN) | |
else: | |
raise ValueError("Hugging Face token not found in environment variables.") | |
# Define model and tokenizer for translation between Romanian, French, and English | |
rfr_md = "Helsinki-NLP/opus-mt-ro-fr" | |
frr_md = "Helsinki-NLP/opus-mt-fr-en" | |
enr_md = "Helsinki-NLP/opus-mt-en-ro" | |
rfr_token = MarianTokenizer.from_pretrained(rfr_md) | |
rfr_model = MarianMTModel.from_pretrained(rfr_md) | |
fren_token = MarianTokenizer.from_pretrained(frr_md) | |
fren_model = MarianMTModel.from_pretrained(frr_md) | |
enr_token = MarianTokenizer.from_pretrained(enr_md) | |
enr_model = MarianMTModel.from_pretrained(enr_md) | |
# Load the Gemma model for text generation, ensuring it runs on CPU | |
gemma_model = "stabilityai/stablelm-2-1_6b-chat" | |
gemma_tokenizer = AutoTokenizer.from_pretrained(gemma_model) | |
pipe = pipeline( | |
"text-generation", | |
model=gemma_model, | |
tokenizer=gemma_tokenizer, | |
device="cpu" # Use CPU | |
) | |
# Function to split text into smaller blocks for translation | |
def char_split(text, tokenizer, max_length=498): | |
tokens = tokenizer(text, return_tensors="pt", truncation=False, padding=False)["input_ids"][0] | |
blocks_ = [] | |
start = 0 | |
while start < len(tokens): | |
end = min(start + max_length, len(tokens)) | |
blocks_.append(tokens[start:end]) | |
start = end | |
return blocks_ | |
# Function to translate the text block by block | |
def translate(text, model, tokenizer, max_length=500): | |
token_blocks = char_split(text, tokenizer, max_length) | |
text_en = "" | |
for blk_ in token_blocks: | |
blk_char = tokenizer.decode(blk_, skip_special_tokens=True) | |
translated = model.generate(**tokenizer(blk_char, return_tensors="pt", padding=True, truncation=True)) | |
text_en += tokenizer.decode(translated[0], skip_special_tokens=True) + " " | |
return text_en.strip() | |
# Function to remove formatting symbols | |
def rm_rf(text): | |
import re | |
return re.sub(r'\*+', '', text) | |
# Generate text based on Romanian input | |
def generate(text): | |
fr_txt = translate(text, rfr_model, rfr_token) | |
en_txt = translate(fr_txt, fren_model, fren_token) | |
sequences = pipe( | |
en_txt, | |
max_new_tokens=2048, | |
do_sample=True, | |
return_full_text=False, | |
) | |
generated_text = sequences[0]['generated_text'] | |
cl_txt = rm_rf(generated_text) | |
ro_txt = translate(cl_txt, enr_model, enr_token) | |
return ro_txt | |
# Create the Gradio interface | |
interface = gr.Interface( | |
fn=generate, | |
inputs=gr.Textbox(label="prompt:", lines=2, placeholder="prompt..."), | |
outputs="text", | |
title="Gemma Romanian", | |
description="romanian gemma using nlps." | |
) | |
# Launch the Gradio app | |
interface.launch() |