André Osyguß
add compression step
7def992
import gradio as gr
import torch
import spaces
from transformers import pipeline
# Laden des LLM-Modells und des Tokenizers
# Dies ist ein kleines, schnelles Modell. Ersetzen Sie es durch Ihr bevorzugtes gpt-oss-Modell.
# Achtung: Größere Modelle benötigen mehr VRAM und eine GPU-Hardware-Instanz.
try:
pipe = pipeline(
"text-generation",
model="openai/gpt-oss-20b",
dtype=torch.bfloat16,
device=0 if torch.cuda.is_available() else -1
)
except Exception as e:
print(f"Fehler beim Laden des Modells: {e}")
pipe = None
@spaces.GPU
def chat_with_llm(message, history, system_prompt_text):
"""
Verarbeitet die Benutzernachricht, fügt den Chat-Verlauf und den System-Prompt hinzu und
generiert eine Antwort vom LLM.
"""
if not pipe:
return "Modell konnte nicht geladen werden. Bitte überprüfen Sie die Hardware-Konfiguration oder das Modell-Repository."
# Den System-Prompt und den vorherigen Chat-Verlauf kombinieren
full_prompt = f"{system_prompt_text}\n\n"
for msg in history:
if msg['role'] == 'user':
full_prompt += f"Benutzer: {msg['content']}\n"
elif msg['role'] == 'assistant':
full_prompt += f"Assistent: {msg['content']}\n"
# Die aktuelle Nachricht hinzufügen
full_prompt += f"Benutzer: {message}\nAssistent: "
# Generierung der Antwort
outputs = pipe(
full_prompt,
max_new_tokens=100, # Anzahl der neuen zu generierenden Tokens
do_sample=True,
temperature=0.7,
top_k=50,
top_p=0.95,
pad_token_id=pipe.tokenizer.eos_token_id
)
# Extrahieren der generierten Antwort
response = outputs[0]["generated_text"]
# Schneiden, um nur die Antwort des Assistenten zu erhalten
# (Dies ist wichtig, da das Modell den Prompt oft wiedergibt)
response_start = response.find("Assistent: ")
if response_start != -1:
clean_response = response[response_start + len("Assistent: "):].strip()
else:
clean_response = response.strip()
return clean_response
# Definition der Gradio-UI mit Blocks
with gr.Blocks(theme=gr.themes.Soft()) as demo:
gr.Markdown("# GPT-OSS Chat mit Prompt-Engineering")
gr.Markdown("Geben Sie unten einen Prompt-Kontext ein, um das Verhalten des LLM zu steuern. Schreiben Sie dann Ihre Nachricht in das Chat-Feld.")
# Eingabefeld für den System-Prompt
system_prompt_input = gr.Textbox(
label="Prompt-Kontext (Optional)",
placeholder="z. B. 'Sie sind ein Experte für das Schreiben von Gedichten.'",
lines=3
)
# Die Chat-Oberfläche, die unsere Funktion verwendet
chat_interface = gr.ChatInterface(
fn=chat_with_llm,
chatbot=gr.Chatbot(height=500),
additional_inputs=[system_prompt_input],
type='messages'
)
if __name__ == "__main__":
demo.launch()