Spaces:
Sleeping
Sleeping
André Osyguß commited on
Commit ·
7def992
1
Parent(s): fc9fee2
add compression step
Browse files
app.py
CHANGED
|
@@ -17,19 +17,60 @@ except Exception as e:
|
|
| 17 |
print(f"Fehler beim Laden des Modells: {e}")
|
| 18 |
pipe = None
|
| 19 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
@spaces.GPU
|
| 21 |
-
def chat_with_llm(message, history, system_prompt_text):
|
| 22 |
"""
|
| 23 |
-
Verarbeitet die Benutzernachricht, fügt den Chat-Verlauf
|
| 24 |
generiert eine Antwort vom LLM.
|
| 25 |
"""
|
| 26 |
if not pipe:
|
| 27 |
return "Modell konnte nicht geladen werden. Bitte überprüfen Sie die Hardware-Konfiguration oder das Modell-Repository."
|
| 28 |
|
| 29 |
-
# Den System-Prompt und den vorherigen Chat-Verlauf kombinieren
|
| 30 |
full_prompt = f"{system_prompt_text}\n\n"
|
| 31 |
-
|
| 32 |
-
full_prompt += f"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
|
| 34 |
# Die aktuelle Nachricht hinzufügen
|
| 35 |
full_prompt += f"Benutzer: {message}\nAssistent: "
|
|
@@ -60,23 +101,82 @@ def chat_with_llm(message, history, system_prompt_text):
|
|
| 60 |
|
| 61 |
# Definition der Gradio-UI mit Blocks
|
| 62 |
with gr.Blocks(theme=gr.themes.Soft()) as demo:
|
| 63 |
-
gr.Markdown("# GPT-OSS
|
| 64 |
-
gr.Markdown("Geben Sie
|
| 65 |
-
|
| 66 |
-
# Eingabefeld für den System-Prompt
|
| 67 |
-
system_prompt_input = gr.Textbox(
|
| 68 |
-
label="Prompt-Kontext (Optional)",
|
| 69 |
-
placeholder="z. B. 'Sie sind ein Experte für das Schreiben von Gedichten.'",
|
| 70 |
-
lines=3
|
| 71 |
-
)
|
| 72 |
|
| 73 |
-
#
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 80 |
|
| 81 |
if __name__ == "__main__":
|
| 82 |
demo.launch()
|
|
|
|
| 17 |
print(f"Fehler beim Laden des Modells: {e}")
|
| 18 |
pipe = None
|
| 19 |
|
| 20 |
+
@spaces.GPU
|
| 21 |
+
def compress_context(context_text, compression_prompt):
|
| 22 |
+
"""
|
| 23 |
+
Komprimiert den gegebenen Kontext mit GPT-OSS basierend auf dem Komprimierungs-Prompt.
|
| 24 |
+
"""
|
| 25 |
+
if not pipe:
|
| 26 |
+
return "Modell konnte nicht geladen werden. Bitte überprüfen Sie die Hardware-Konfiguration oder das Modell-Repository."
|
| 27 |
+
|
| 28 |
+
if not context_text.strip():
|
| 29 |
+
return ""
|
| 30 |
+
|
| 31 |
+
# Komprimierungs-Prompt mit Kontext kombinieren
|
| 32 |
+
full_prompt = f"{compression_prompt}\n\nKontext zu komprimieren:\n{context_text}\n\nKomprimierte Version:"
|
| 33 |
+
|
| 34 |
+
# Komprimierung generieren
|
| 35 |
+
outputs = pipe(
|
| 36 |
+
full_prompt,
|
| 37 |
+
max_new_tokens=200, # Mehr Tokens für Komprimierung
|
| 38 |
+
do_sample=True,
|
| 39 |
+
temperature=0.3, # Niedrigere Temperatur für konsistentere Komprimierung
|
| 40 |
+
top_k=50,
|
| 41 |
+
top_p=0.95,
|
| 42 |
+
pad_token_id=pipe.tokenizer.eos_token_id
|
| 43 |
+
)
|
| 44 |
+
|
| 45 |
+
# Extrahieren der komprimierten Version
|
| 46 |
+
response = outputs[0]["generated_text"]
|
| 47 |
+
|
| 48 |
+
# Nur die komprimierte Version extrahieren
|
| 49 |
+
if "Komprimierte Version:" in response:
|
| 50 |
+
compressed = response.split("Komprimierte Version:")[-1].strip()
|
| 51 |
+
else:
|
| 52 |
+
compressed = response.strip()
|
| 53 |
+
|
| 54 |
+
return compressed
|
| 55 |
+
|
| 56 |
@spaces.GPU
|
| 57 |
+
def chat_with_llm(message, history, system_prompt_text, compressed_context):
|
| 58 |
"""
|
| 59 |
+
Verarbeitet die Benutzernachricht, fügt den Chat-Verlauf, System-Prompt und komprimierten Kontext hinzu und
|
| 60 |
generiert eine Antwort vom LLM.
|
| 61 |
"""
|
| 62 |
if not pipe:
|
| 63 |
return "Modell konnte nicht geladen werden. Bitte überprüfen Sie die Hardware-Konfiguration oder das Modell-Repository."
|
| 64 |
|
| 65 |
+
# Den System-Prompt, komprimierten Kontext und den vorherigen Chat-Verlauf kombinieren
|
| 66 |
full_prompt = f"{system_prompt_text}\n\n"
|
| 67 |
+
if compressed_context and compressed_context.strip():
|
| 68 |
+
full_prompt += f"Kontext: {compressed_context}\n\n"
|
| 69 |
+
for msg in history:
|
| 70 |
+
if msg['role'] == 'user':
|
| 71 |
+
full_prompt += f"Benutzer: {msg['content']}\n"
|
| 72 |
+
elif msg['role'] == 'assistant':
|
| 73 |
+
full_prompt += f"Assistent: {msg['content']}\n"
|
| 74 |
|
| 75 |
# Die aktuelle Nachricht hinzufügen
|
| 76 |
full_prompt += f"Benutzer: {message}\nAssistent: "
|
|
|
|
| 101 |
|
| 102 |
# Definition der Gradio-UI mit Blocks
|
| 103 |
with gr.Blocks(theme=gr.themes.Soft()) as demo:
|
| 104 |
+
gr.Markdown("# GPT-OSS Context Compression Chat")
|
| 105 |
+
gr.Markdown("**Schritt 1:** Geben Sie Ihren Kontext ein und lassen Sie ihn komprimieren. **Schritt 2:** Chatten Sie mit dem komprimierten Kontext.")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 106 |
|
| 107 |
+
# State für komprimierten Kontext
|
| 108 |
+
compressed_context_state = gr.State("")
|
| 109 |
+
|
| 110 |
+
with gr.Tab("1. Kontext Komprimierung"):
|
| 111 |
+
gr.Markdown("### Kontext eingeben und komprimieren")
|
| 112 |
+
|
| 113 |
+
# Eingabefeld für den ursprünglichen Kontext
|
| 114 |
+
context_input = gr.Textbox(
|
| 115 |
+
label="Kontext zum Komprimieren",
|
| 116 |
+
placeholder="Geben Sie hier Ihren langen Kontext ein (z.B. Dokument, Artikel, etc.)...",
|
| 117 |
+
lines=10,
|
| 118 |
+
max_lines=20
|
| 119 |
+
)
|
| 120 |
+
|
| 121 |
+
# Komprimierungs-Prompt (von dir definiert)
|
| 122 |
+
compression_prompt_input = gr.Textbox(
|
| 123 |
+
label="Komprimierungs-Prompt",
|
| 124 |
+
value="Fasse den folgenden Text präzise und strukturiert zusammen. Behalte alle wichtigen Informationen, Fakten und Details bei, aber entferne Redundanzen und unwichtige Füllwörter. Die Zusammenfassung soll als Kontext für weitere Gespräche dienen.",
|
| 125 |
+
lines=4
|
| 126 |
+
)
|
| 127 |
+
|
| 128 |
+
compress_btn = gr.Button("Kontext komprimieren", variant="primary")
|
| 129 |
+
|
| 130 |
+
# Ausgabe der Komprimierung
|
| 131 |
+
compressed_output = gr.Textbox(
|
| 132 |
+
label="Komprimierter Kontext",
|
| 133 |
+
lines=6,
|
| 134 |
+
interactive=False
|
| 135 |
+
)
|
| 136 |
+
|
| 137 |
+
# Komprimierungs-Event
|
| 138 |
+
compress_btn.click(
|
| 139 |
+
fn=compress_context,
|
| 140 |
+
inputs=[context_input, compression_prompt_input],
|
| 141 |
+
outputs=[compressed_output]
|
| 142 |
+
).then(
|
| 143 |
+
fn=lambda x: x, # Kopiere komprimierten Kontext in State
|
| 144 |
+
inputs=[compressed_output],
|
| 145 |
+
outputs=[compressed_context_state]
|
| 146 |
+
)
|
| 147 |
+
|
| 148 |
+
with gr.Tab("2. Chat mit Kontext"):
|
| 149 |
+
gr.Markdown("### Chat mit dem komprimierten Kontext")
|
| 150 |
+
|
| 151 |
+
# Anzeige des aktuellen komprimierten Kontexts
|
| 152 |
+
current_context_display = gr.Textbox(
|
| 153 |
+
label="Aktueller komprimierter Kontext",
|
| 154 |
+
lines=4,
|
| 155 |
+
interactive=False,
|
| 156 |
+
value="Noch kein Kontext komprimiert. Wechseln Sie zu Tab 1."
|
| 157 |
+
)
|
| 158 |
+
|
| 159 |
+
# System-Prompt für Chat
|
| 160 |
+
system_prompt_input = gr.Textbox(
|
| 161 |
+
label="System-Prompt (Optional)",
|
| 162 |
+
placeholder="z. B. 'Sie sind ein hilfsreicher Assistent.'",
|
| 163 |
+
lines=2
|
| 164 |
+
)
|
| 165 |
+
|
| 166 |
+
# Chat-Interface
|
| 167 |
+
chat_interface = gr.ChatInterface(
|
| 168 |
+
fn=chat_with_llm,
|
| 169 |
+
chatbot=gr.Chatbot(height=400),
|
| 170 |
+
additional_inputs=[system_prompt_input, compressed_context_state],
|
| 171 |
+
type='messages'
|
| 172 |
+
)
|
| 173 |
+
|
| 174 |
+
# Update der Kontext-Anzeige wenn sich der State ändert
|
| 175 |
+
compressed_context_state.change(
|
| 176 |
+
fn=lambda x: x if x else "Noch kein Kontext komprimiert. Wechseln Sie zu Tab 1.",
|
| 177 |
+
inputs=[compressed_context_state],
|
| 178 |
+
outputs=[current_context_display]
|
| 179 |
+
)
|
| 180 |
|
| 181 |
if __name__ == "__main__":
|
| 182 |
demo.launch()
|
test.py
CHANGED
|
@@ -28,8 +28,11 @@ def chat_with_llm(message, history, system_prompt_text):
|
|
| 28 |
|
| 29 |
# Den System-Prompt und den vorherigen Chat-Verlauf kombinieren
|
| 30 |
full_prompt = f"{system_prompt_text}\n\n"
|
| 31 |
-
for
|
| 32 |
-
|
|
|
|
|
|
|
|
|
|
| 33 |
|
| 34 |
# Die aktuelle Nachricht hinzufügen
|
| 35 |
full_prompt += f"Benutzer: {message}\nAssistent: "
|
|
|
|
| 28 |
|
| 29 |
# Den System-Prompt und den vorherigen Chat-Verlauf kombinieren
|
| 30 |
full_prompt = f"{system_prompt_text}\n\n"
|
| 31 |
+
for msg in history:
|
| 32 |
+
if msg['role'] == 'user':
|
| 33 |
+
full_prompt += f"Benutzer: {msg['content']}\n"
|
| 34 |
+
elif msg['role'] == 'assistant':
|
| 35 |
+
full_prompt += f"Assistent: {msg['content']}\n"
|
| 36 |
|
| 37 |
# Die aktuelle Nachricht hinzufügen
|
| 38 |
full_prompt += f"Benutzer: {message}\nAssistent: "
|