skypro1111's picture
change inference ui
2631e2b
import gradio as gr
import os
import ctranslate2
from transformers import M2M100Tokenizer
from huggingface_hub import snapshot_download
import time
# Model settings
MODEL_PATH = os.getenv("MODEL_PATH", "skypro1111/m2m100-ukr-verbalization-ct2")
TOKENIZER_PATH = os.getenv("TOKENIZER_PATH", "skypro1111/m2m100-ukr-verbalization")
# Initialize translator and tokenizer globally
def init_model(model_path=MODEL_PATH, tokenizer_path=TOKENIZER_PATH):
print("\nInitializing CTranslate2 model and tokenizer...")
# Download the model from HuggingFace Hub
local_model_path = snapshot_download(
repo_id=model_path,
allow_patterns=["*.bin", "*.json", "tokenizer.json", "vocab.json"],
)
# Initialize translator with optimizations for CPU
translator = ctranslate2.Translator(
local_model_path,
device="cpu",
compute_type="int8", # Use INT8 quantization for CPU
intra_threads=4, # Adjust based on CPU cores available
)
# Load tokenizer
tokenizer = M2M100Tokenizer.from_pretrained(tokenizer_path)
tokenizer.src_lang = "uk"
return translator, tokenizer
translator, tokenizer = init_model()
def process_text(text: str):
"""Process a single text input using the CTranslate2 model."""
start_time = time.time()
# Tokenize input
source = tokenizer.convert_ids_to_tokens(tokenizer.encode(text))
target_prefix = [tokenizer.lang_code_to_token["uk"]]
# Run inference
results = translator.translate_batch(
[source],
target_prefix=[target_prefix],
beam_size=1,
num_hypotheses=1,
use_vmap=True,
)
# Get target tokens and decode
target = results[0].hypotheses[0][1:] # Remove language token
output = tokenizer.decode(tokenizer.convert_tokens_to_ids(target))
inference_time = time.time() - start_time
return output, inference_time
def inference(text):
"""Gradio interface function."""
output, inference_time = process_text(text)
return output, f"{inference_time:.3f} секунд"
# Define examples from inference_ct2.py
examples = [
["Моя бабуся народилася 07.11.1919, у важкий післявоєнний час."],
["Зустріч призначена на 15:30 12.05.2025 у конференц-залі №3."],
["Телефонуйте нам за номером +380 (44) 123-45-67 або 0800 500 123."],
["Температура повітря сьогодні становить +25°C, а тиск 750 мм.рт.ст."],
["ТОВ «Мрія» було засновано 28/06/2022 з початковим капіталом 50 тис. грн."],
["Швидкість вітру 15 м/с, видимість 10 км, вологість 65%."],
["Потяг №743 Київ-Львів відправляється о 08:45 з платформи №2."],
["Ціна на пальне зросла на 2,5 грн/л і становить 54,99 грн."],
["Площа квартири 75,5 м², висота стелі 2,75 м."],
["Відстань між містами становить 450 км або 280 миль."],
["Станом на 7:00 15 квітня 2025 року температура повітря становить +18°C, вологість 60%."]
]
# Define Gradio interface
with gr.Blocks() as interface:
gr.Markdown("# Вербалізація українського тексту (M2M100-CT2)")
gr.Markdown("""Модель для перетворення чисел, дат, одиниць вимірювання та інших символьних позначень
у їх текстовий запис українською мовою. Використовує оптимізовану CTranslate2 версію для швидкого інференсу.""")
with gr.Row():
with gr.Column():
input_text = gr.Textbox(
label="Введіть текст для вербалізації",
placeholder="Наприклад: Температура повітря сьогодні становить +25°C"
)
submit_btn = gr.Button("Вербалізувати")
gr.Examples(
examples=examples,
inputs=input_text,
)
with gr.Column():
output_text = gr.Textbox(label="Вербалізований текст")
inference_time = gr.Textbox(label="Час обробки")
gr.Markdown("""
### Можливості моделі:
- Дати та час
- Телефонні номери
- Одиниці вимірювання
- Грошові суми
- Числові вирази
### Технічні деталі:
- Базова модель: facebook/m2m100_418M
- Оптимізація: CTranslate2 з INT8 квантизацією
""")
submit_btn.click(
fn=inference,
inputs=input_text,
outputs=[output_text, inference_time],
)
# Launch the interface
interface.launch(share=False)