swabianGPT / app.py
Mario12355's picture
unsl
9f60332
import gradio as gr
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
import torch
from unsloth import FastLanguageModel
# Modell und Tokenizer laden
model_name = "Mario12355/llama_3.1_20.11_fini_dpo"
model, tokenizer = FastLanguageModel.from_pretrained(
model_name = model_name,
max_seq_length = 2048,
dtype = None,
load_in_4bit = True,
)
# Dein Alpaca-Prompt Template
alpaca_prompt = """Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.
### Instruction:
{}
### Input:
{}
### Response:
{}"""
def translate(
message,
history,
direction,
max_tokens=128
):
FastLanguageModel.for_inference(model)
# Richtung bestimmen und Anweisung formatieren
if direction == "hochdeutsch_to_schwaebisch":
instruction = "Übersetze den hochdeutschen Text ins Schwäbische. Achte auf eine sinnvolle und korrekte Satzbildung!"
elif direction == "schwaebisch_to_hochdeutsch":
instruction = "Übersetze den schwäbischen Text ins Hochdeutsche. Achte auf eine sinnvolle und korrekte Satzbildung!"
else:
raise ValueError("Ungültige Übersetzungsrichtung")
# Input für das Modell vorbereiten
inputs = tokenizer(
[alpaca_prompt.format(instruction, message, "")],
return_tensors="pt"
).to(model.device)
# Streaming-Generator erstellen
response = ""
streamer = TextStreamer(tokenizer)
# Generator-Konfiguration
generation_config = {
"max_new_tokens": max_tokens,
"do_sample": True,
"temperature": 0.7,
"top_p": 0.95,
"streamer": streamer,
**inputs
}
# Text generieren und streamen
for output in model.generate(**generation_config):
# Token decodieren und zum Response hinzufügen
new_text = tokenizer.decode(output, skip_special_tokens=True)
if new_text != response: # Nur neue Tokens ausgeben
yield new_text
# Gradio Interface erstellen
demo = gr.ChatInterface(
translate,
additional_inputs=[
gr.Radio(
choices=["hochdeutsch_to_schwaebisch", "schwaebisch_to_hochdeutsch"],
value="hochdeutsch_to_schwaebisch",
label="Übersetzungsrichtung"
),
gr.Slider(
minimum=32,
maximum=256,
value=128,
step=32,
label="Maximale Anzahl neuer Tokens"
)
],
title="Schwäbisch Übersetzer",
description="""Dieser Übersetzer kann Texte zwischen Hochdeutsch und Schwäbisch übersetzen.
Wählen Sie die gewünschte Übersetzungsrichtung und geben Sie Ihren Text ein.""",
examples=[
["Guten Tag, wie geht es Ihnen?", "hochdeutsch_to_schwaebisch"],
["Griaß Gott, wie goht's dir?", "schwaebisch_to_hochdeutsch"]
]
)
if __name__ == "__main__":
demo.launch(
share=True,
show_error=True,
)