File size: 2,659 Bytes
e1daf64
75a5b67
3ad86a5
e1daf64
75a5b67
3ad86a5
75a5b67
28e942f
75a5b67
e1daf64
3ad86a5
75a5b67
3ad86a5
e1daf64
75a5b67
 
 
3ad86a5
75a5b67
3ad86a5
75a5b67
3ad86a5
75a5b67
3ad86a5
75a5b67
3ad86a5
75a5b67
3ad86a5
e1daf64
75a5b67
 
 
 
 
e1daf64
3ad86a5
 
75a5b67
3ad86a5
75a5b67
3ad86a5
75a5b67
3ad86a5
 
75a5b67
 
 
 
 
 
 
 
 
 
3ad86a5
75a5b67
3ad86a5
 
75a5b67
 
3ad86a5
75a5b67
3ad86a5
 
75a5b67
3ad86a5
75a5b67
3ad86a5
75a5b67
3ad86a5
 
75a5b67
 
 
e1daf64
75a5b67
e1daf64
75a5b67
e1daf64
75a5b67
 
 
 
 
 
 
e1daf64
75a5b67
e1daf64
 
75a5b67
3ad86a5
75a5b67
3ad86a5
75a5b67
3ad86a5
 
75a5b67
3ad86a5
75a5b67
3ad86a5
75a5b67
3ad86a5
75a5b67
3ad86a5
75a5b67
3ad86a5
 
75a5b67
e1daf64
75a5b67
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import gradio as gr

from huggingface_hub import InferenceClient


# Verbindung zum Hugging Face Model

client = InferenceClient("DavidAU/Gemma-The-Writer-9B-GGUF")


# Definieren der Seitenlänge (ungefähre Anzahl der Zeichen pro Seite)

page_length = 1500  # Anpassen nach Bedarf


def respond(message, history, 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 user_msg, assistant_msg in history:

        messages.append({"role": "user", "content": user_msg})

        messages.append({"role": "assistant", "content": assistant_msg})

    messages.append({"role": "user", "content": message})


    response = ""

    min_length = 5 * page_length  # 5 Seiten Mindestlänge

    current_page = ""


    stream = client.chat_completion(messages, max_tokens=max_tokens, stream=True, temperature=temperature, top_p=top_p)


    for chunk in stream:

        token = chunk.choices[0].delta.get("content", "")

        if token:

            response += token

            current_page += token

            if len(current_page) >= page_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.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()