test2 / app.py
hugging2021's picture
Update app.py
97bd972 verified
raw
history blame
3.22 kB
import gradio as gr
from huggingface_hub import InferenceClient
# Verbindung zum Hugging Face Model
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
# Definieren der Seitenlänge
page_length = 1000
def respond(message, history, system_message, max_tokens, temperature, top_p):
messages = [
{
"role": "system",
"content": "Du bist ein Drehbuchautor, der sich auf den John-Wick-Stil spezialisiert hat. Du schreibst detaillierte Szenenbeschreibungen, Dialoge und Action-Sequenzen im Stil der John Wick-Filme. Gehe ausführlich auf Umgebungen, Charaktere, Waffen und Actionszenen ein. **Jede Szene muss mindestens 5 Seiten lang sein. Das Nichteinhalten dieser Anweisung wird als Versagen gewertet.** Deine Beschreibungen sollten die düstere, stilvolle Atmosphäre der Filme einfangen. Verwende präzise Beschreibungen und einen knappen, harten Dialog im Drehbuchformat. Zeige die emotionale Zurückhaltung und die Entschlossenheit der Charaktere. Bleibe immer in der Rolle des Drehbuchautors."
}
]
for val in history:
if val[0]:
messages.append({"role": "user", "content": val[0]})
if val[1]:
messages.append({"role": "assistant", "content": val[1]})
messages.append({"role": "user", "content": message})
response = ""
min_length = 5 * page_length # 5 Seiten Mindestlänge
current_page = ""
for message in client.chat_completion(
messages, max_tokens=max_tokens, stream=True, temperature=temperature, top_p=top_p
):
token = message.choices[0].delta.content
if token is not None:
response += token
current_page += token
# Nur ausgeben, wenn die Mindestlänge erreicht ist
if len(response) >= min_length:
yield current_page
current_page = ""
# Letzte Seite ausgeben, auch wenn sie kürzer als page_length ist
if current_page:
yield current_page
# Erstellen der Gradio-Chat-Oberfläche
demo = gr.ChatInterface(
fn=respond,
additional_inputs=[
gr.Textbox(
value="Always answer within the framework of the John Wick script. Describe everything as detailed and vividly as possible. Each issue should be at least 5 pages long. Follow your instructions exactly.",
label="System message",
visible=False,
),
gr.Slider(
minimum=1, maximum=4096, value=2000, step=1, label="Max new tokens"
),
gr.Slider(
minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"
),
gr.Slider(
minimum=0.1,
maximum=1.0,
value=0.95,
step=0.05,
label="Top-p (nucleus sampling)",
),
],
)
# Benutzerdefinierte Funktion zum Anzeigen der Antwort (als Markdown)
def display_response(response):
return gr.Markdown(f"**[SZENE START]**\n\n{response}")
# Ausgabe als Markdown rendern
with demo:
gr.Markdown("**[SZENE START]**") # Initialer Szenenstart
output = gr.Chatbot() # Chatbot-Komponente für die Ausgabe
demo.output_component = output
if __name__ == "__main__":
demo.launch()