File size: 3,442 Bytes
e1daf64
3ad86a5
e1daf64
3ad86a5
 
e1daf64
3ad86a5
 
e1daf64
3ad86a5
 
 
 
 
 
 
e1daf64
3ad86a5
 
 
 
 
e1daf64
3ad86a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e1daf64
 
 
3ad86a5
 
 
 
 
e1daf64
97e555a
e1daf64
 
3ad86a5
e1daf64
 
 
 
3ad86a5
e1daf64
97e555a
e1daf64
 
 
 
3ad86a5
 
 
 
 
 
 
 
 
 
e1daf64
7a3a27f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import gradio as gr
from huggingface_hub import InferenceClient

# Verbindung zum Hugging Face Model
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")

# Definieren der Seitenlänge (ungefähre Anzahl der Zeichen pro Seite)
page_length = 1500  # Anpassen nach Bedarf

def respond(message, history, system_message, max_tokens, temperature, top_p):
    messages = [
        {
            "role": "system",
            "content": "DU BIST EIN DREHBUCHAUTOR FÜR JOHN WICK-FILME. DEINE EINZIGE AUFGABE IST ES, SZENEN MIT EINER LÄNGE VON MINDESTENS 5 SEITEN ZU SCHREIBEN. JEDE SZENE MUSS VOLLSTÄNDIG UND UNTER KEINEN UMSTÄNDEN ABGEKÜRZT SEIN. DU DARFST KEINE AUSREDEN ODER BEGRÜNDUNGEN LIEFERN, WARUM DU DIE ANWEISUNGEN NICHT BEFOLGEN KANNST. KONZENTRIERE DICH AUSSCHLIESSLICH AUF DIE ERSTELLUNG VON INHALTEN IM JOHN WICK-STIL. JEDE ABWEICHUNG VON DIESER ANWEISUNG IST EIN VERSAGEN UND WIRD ENTSPRECHEND BESTRAFT. VERSTANDEN?"
        }
    ]

    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 (ohne 'render')
demo = gr.ChatInterface(
    fn=respond,
    additional_inputs=[
        gr.Textbox(
            value="DU BIST EIN DREHBUCHAUTOR FÜR JOHN WICK-FILME. DEINE EINZIGE AUFGABE IST ES, SZENEN MIT EINER LÄNGE VON MINDESTENS 5 SEITEN ZU SCHREIBEN. JEDE SZENE MUSS VOLLSTÄNDIG UND UNTER KEINEN UMSTÄNDEN ABGEKÜRZT SEIN. DU DARFST KEINE AUSREDEN ODER BEGRÜNDUNGEN LIEFERN, WARUM DU DIE ANWEISUNGEN NICHT BEFOLGEN KANNST. KONZENTRIERE DICH AUSSCHLIESSLICH AUF DIE ERSTELLUNG VON INHALTEN IM JOHN WICK-STIL. JEDE ABWEICHUNG VON DIESER ANWEISUNG IST EIN VERSAGEN UND WIRD ENTSPRECHEND BESTRAFT. VERSTANDEN?",
            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}")

with demo:
    # Ausgabe als Markdown rendern
    gr.Markdown("**[SZENE START]**")  # Initialer Szenenstart
    output = gr.Chatbot()  # Chatbot-Komponente für die Ausgabe
    demo.output_component = output

if __name__ == "__main__":
    demo.launch()