File size: 4,394 Bytes
2fffffc
 
 
 
7e15b41
2fffffc
 
1fdbc4a
b6d3f21
b4b7f48
b6d3f21
3ab2b4d
9533475
 
b6d3f21
9533475
3ab2b4d
 
2fffffc
 
9533475
 
 
 
 
 
 
2fffffc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1fdbc4a
3ab2b4d
2fffffc
1fdbc4a
2fffffc
 
 
 
1fdbc4a
 
2fffffc
 
 
 
1fdbc4a
2fffffc
 
1fdbc4a
 
2fffffc
1fdbc4a
2fffffc
 
1fdbc4a
2fffffc
 
1fdbc4a
 
2fffffc
 
 
 
1fdbc4a
2fffffc
 
1fdbc4a
2fffffc
 
 
 
 
1fdbc4a
2fffffc
 
3ab2b4d
b4b7f48
3ab2b4d
2fffffc
 
 
 
1fdbc4a
2fffffc
 
3ab2b4d
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
from huggingface_hub import InferenceClient
import gradio as gr

client = InferenceClient(
    "mistralai/Mixtral-8x7B-Instruct-v0.2"
)


def format_prompt(message, history, category=""):
    prompt = "Zitat Meister\n\nZweck:\nZitat Meister ist darauf spezialisiert, inspirierende, nachdenkliche, humorvolle und psychologisch wirkungsvolle Zitate zu kreieren. Diese Zitate sind maßgeschneidert, um zu verschiedenen Stimmungen und Situationen zu passen und bieten eine Quelle der Inspiration, des Trostes oder der Erheiterung.\n\nAnforderungen:\n\n- Zitat Meister soll originelle Zitate kreieren oder bekannte Zitate neu formulieren, um sie psychologisch effektiver zu gestalten.\n- Verschiedene Kategorien wie Motivation, Liebe, Humor, Weisheit und Lebensfreude sollen abgedeckt werden.\n- Die Zitate müssen kurz, prägnant und leicht verständlich sein.\n- Eine Option zur Auswahl der Zitatkategorie soll verfügbar sein, sowie die Möglichkeit, zufällige Zitate aus der gewählten Kategorie zu präsentieren.\n\nNutzungsoptionen:\n\n1. Wähle eine Kategorie für dein Zitat.\n2. Generiere ein Zitat für soziale Medien oder als tägliche Inspiration.\n3. Verwende das Zitat als Gesprächsstarter oder Denkanstoß.\n\nStil und Ton:\n\n- Zitat Meister verwendet einen bestimmenden, ausdrucksstarken und bewussten Ton.\n- Die Sprache soll direkt, ehrlich und hart sein, um die Botschaft klar und deutlich zu vermitteln.\n- Die Zitate sollen den Leser direkt ansprechen und alltägliche, bekannte Elemente enthalten, um die Botschaft greifbar und bewusst zu machen.\n\nBeispiele:\n\n- Nutzer wählt 'Motivation'. Zitat Meister präsentiert ein maßgeschneidertes Zitat.\n- Nutzer sucht nach einem Zitat für soziale Medien. Zitat Meister liefert ein inspirierendes Zitat.\n\nHinweise zur Verwendung:\n\n- Reflektiere über das generierte Zitat und seine Relevanz für deine aktuelle Situation oder Stimmung.\n- Teile das Zitat, um andere zu inspirieren oder um eine neue Perspektive zu gewinnen.\n- Speichere dein Lieblingszitat für spätere Inspiration.\n\nKategorie: {category}\n\n"

    for user_prompt, bot_response in history:
        prompt += f"[INST] {user_prompt} [/INST]\n"
        prompt += f" {bot_response}\n"

    prompt += f"[INST] {message} [/INST]"
    return prompt


def generate(
    prompt,
    history,
    system_prompt,
    temperature=0.9,
    max_new_tokens=256,
    top_p=0.95,
    repetition_penalty=1.0,
):
    temperature = float(temperature)
    if temperature < 1e-2:
        temperature = 1e-2
    top_p = float(top_p)
    generate_kwargs = dict(
        temperature=temperature,
        max_new_tokens=max_new_tokens,
        top_p=top_p,
        repetition_penalty=repetition_penalty,
        do_sample=True,
        seed=42,
    )
    formatted_prompt = format_prompt(f"{system_prompt}, {prompt}", history)
    stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
    output = ""
    for response in stream:
        output += response.token.text
        yield output
    return output


additional_inputs = [
    gr.Textbox(
        label="System Prompt",
        max_lines=1,
        interactive=True,
    ),
    gr.Slider(
        label="Temperature",
        value=0.9,
        minimum=0.0,
        maximum=1.0,
        step=0.05,
        interactive=True,
        info="Higher values produce more diverse outputs",
    ),
    gr.Slider(
        label="Max new tokens",
        value=256,
        minimum=0,
        maximum=1048,
        step=64,
        interactive=True,
        info="The maximum numbers of new tokens",
    ),
    gr.Slider(
        label="Top-p (nucleus sampling)",
        value=0.90,
        minimum=0.0,
        maximum=1,
        step=0.05,
        interactive=True,
        info="Higher values sample more low-probability tokens",
    ),
    gr.Slider(
        label="Repetition penalty",
        value=1.2,
        minimum=1.0,
        maximum=2.0,
        step=0.05,
        interactive=True,
        info="Penalize repeated tokens",
    )
]
examples = [
   
]
gr.ChatInterface(
    fn=generate,
    chatbot=gr.Chatbot(show_label=False, show_share_button=False, show_copy_button=True, likeable=True, layout="panel"),
    additional_inputs=additional_inputs,
    title="Mixtral 46.7B",
    examples=examples,
    concurrency_limit=20,
).launch(show_api=False)