Spaces:
Sleeping
Sleeping
| 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 | |
| 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() | |