AilexGPT's picture
Update app.py
344548e verified
import gradio as gr
import os
import requests
import json
SYSTEM_PROMPT = "Als LLM besteht deine Aufgabe darin, detaillierte Aufforderungen zu generieren, die mit 'Generiere das Bild' beginnen, für Bildgenerierungsmodelle basierend auf Benutzereingaben. Sei beschreibend und spezifisch, aber achte auch darauf, dass deine Aufforderungen klar und prägnant sind."
TITLE = "Bildanreger"
EXAMPLE_INPUT = "Ein AI Cyborg reitet ein Stier im Weltraum"
zephyr_7b_beta = "https://api-inference.huggingface.co/models/HuggingFaceH4/zephyr-7b-beta/"
HF_TOKEN = os.getenv("HF_TOKEN")
HEADERS = {"Authorization": f"Bearer {HF_TOKEN}"}
def build_input_prompt(message, chatbot, system_prompt):
"""
Konstruiert die Eingabeaufforderung aus den Chatbot-Interaktionen und der aktuellen Nachricht.
"""
input_prompt = "\n" + system_prompt + "\n\n"
for interaction in chatbot:
input_prompt += f"{interaction[0]}\n\n{interaction[1]}\n\n"
input_prompt += f"{message}\n"
return input_prompt
def post_request_beta(payload):
"""
Sendet eine POST-Anfrage an die vordefinierte Zephyr-7b-Beta-URL und gibt die JSON-Antwort zurück.
"""
response = requests.post(zephyr_7b_beta, headers=HEADERS, json=payload)
response.raise_for_status() # Löst einen HTTPError aus, wenn die HTTP-Anfrage einen erfolglosen Statuscode zurückgegeben hat
return response.json()
def predict_beta(message, chatbot=[], system_prompt=SYSTEM_PROMPT):
input_prompt = build_input_prompt(message, chatbot, system_prompt)
data = {
"inputs": input_prompt
}
try:
response_data = post_request_beta(data)
json_obj = response_data[0]
if 'generated_text' in json_obj and len(json_obj['generated_text']) > 0:
return json_obj['generated_text']
elif 'error' in json_obj:
raise Exception(json_obj['error'])
else:
raise Exception("Unerwartete Antwort vom Server")
except requests.HTTPError as e:
raise Exception(f"Anfrage fehlgeschlagen mit Statuscode {e.response.status_code}")
except json.JSONDecodeError as e:
raise Exception(f"Antwort konnte nicht als JSON dekodiert werden: {str(e)}")
def test_preview_chatbot(message, history=[]):
response = predict_beta(message, history)
history.append((message, response))
return response, history
with gr.Blocks(theme='syddharth/gray-minimal') as app:
with gr.Row():
chatbot_preview = gr.Chatbot()
textbox_preview = gr.Textbox(label="Deine Eingabe", placeholder=EXAMPLE_INPUT)
btn_send = gr.Button("Senden")
chat_history = []
def update_chatbot(input_text):
global chat_history
response, chat_history = test_preview_chatbot(input_text, chat_history)
chatbot_preview.append((input_text, response))
btn_send.click(fn=update_chatbot, inputs=textbox_preview, outputs=chatbot_preview)
app.launch(share=True)